An editable implementation of Parts. This is the only implementation of {@code Parts}, but the interface makes it a bit easier to understand when an EditableParts is actually supposed to be editable.
An EditableParts is intended to be used in several phases:
- It's created empty.
- The various accumulate methods are used to add various types of "parts" to it.
- It's used as a Parts object (which, itself, has multiple phases).