Some revamping of classloader graph handling.

This is only a step in the right direction: class loaders for Maven artifacts
now properly "participate" in the graph, in that if artifact A depends on
artifact C and artifact B depends on artifact C, they use the same dependent
class loader instead of each loading the class themselves.

This is necessary to handle situations like project-service depending on
codex-core (from Maven), and maven-project depending on codex-java (from
Maven). maven-project thus has a transitive dependency on codex-core and we
need to be sure that those classes come from the same class loader that
project-service is using.

However, this opens a Pandora's box of issues relating to Maven version
conflict resolution which I'm going to have to roll up my sleeves and tackle at
some point. For now we punt and just make sure everyone depends on the same
versions of everything.