Replace with an ArtifactBuilder that is in charge of building up the primary artifact and its set of derived artifacts. The set of available builders will be chained together, allowing devs to extend the build-in capabilities.
When building, if a relationship target is not available in the current set of primary/derived artifacts, a new mediation layer, RelationshipSource, will be given enough information to define the target value in a later step. This information could include a QName, etc.
After the artifacts are persisted in JCR, the builders are re-called to process any RelationshipSources. Technically, this could be combined with the above into one single step. However, due to the chaining, we want to provide visibility into the entire set of artifacts provided by the whole chain. The alternative, passing the list of artifacts through the chain, is brittle and would require knowing required ordering ahead of time. This idea will be vital for