[#8] Adding notions of GraphMutator and VersionManager to allow version selections/substitutions, as would happen when a snapshot is resolved or managed dependencies are propagated down the graph. The mutator is the mechanism by which managed dependencies will accumulate during traversal, while the version manager is used to as a store for version info (some of which can be stored in the workspace itself). This is a first pass, so it's likely these concepts will have to be tightened up in the future.