Use the ArtifactResolver to get any meta-data artifacts required when parsing descriptors

- Added a ComponentMetaDataArtifact extends SoftwareArtifact (internal for now)
- IvyResolver, MavenResolver and IvyDependencyResolverAdapter can provide metadata artifacts on request
- Ivy and Pom parsers now request the ComponentMetaDataArtifact for a parent module, removing the construction of artifact instances from the parser.
Started to extract resolution of Artifacts from resolution of Component graph

- Include details of source repository in ModuleVersionMetaData provided by UserResolverChain
    - ModuleSource is now a property of ModuleVersionMetaData
- ArtifactResolver is no longer stateful with respect to source repository, but uses source information from ModuleVersionMetaData
   - ArtifactResolver is not yet extracted into separate service
Split ArtifactResolver out as a separate service

- Removed get/set ArtifactResolver on ModuleVersionResolveResult
- Split RepositoryChainDependencyResolver out of UserResolverChain,
  which is now simply a provider of DependencyToModuleVersionResolver and ArtifactResolver
- Split ProjectArtifactResolver out of ProjectDependencyResolver: lookup the project by path for each resolved artifact.
Make a copy of ModuleVersionMetaData when supplying ModuleSource
- no longer need a MutableModuleVersionMetaData to do so
Removed ErrorHandlingArtifactResolver
Cache correctly in the face of resolution failures
Replaced ResolvedArtifactFactory with a contextualized ArtifactResolver
Split the resolution of artifacts into separate list and download actions

- ArtifactResolver.resolveArtifactSet() determines the set of available artifacts for a module
- ArtifactResolver.resolveArtifact() retrieves an actual artifact file
Use ArtifactResolver to determine set of artifacts for a module version

- Added ArtifactResolveContext as input to request a particular set of artifacts
    - ConfigurationResolveContext indicates that artifacts from a particular configuration required
    - DeveloperArtifactResolveContext includes the artifact type requested
- The decision of which artifacts to include in a resolution is now responsibility of the ArtifactResolver