Simplify join interfaces [SERINA-10]
Use left joins only for now [SERINA-10]
Use delegate method to get cached mapper instances [SERINA-10]

Rather than spawning a whole crew of the same old mappers, just use
cached existing ones.
Reduce accessibility [SERINA-10]
Add addUniquely() and merge() [SERINA-10]
Add full object graph hydration [SERINA-10]

This is manually constructed from all the constituent parts. The dynamic
object graph was not used at all. This might actually be a better
outcome due to the possibility of some crazy nonstandard database
design, or some othe requirement, which requires bending rules.
Use joinCollections() [SERINA-10]

Still manual construction and hydration, just using it in place of the
other loops

This should be updated to use the Mapper relationship rules instead of
passing $key1, $key2, $destination as parameters. The collection
elements themselves should be sufficient to determine which rules to
use.