REVIEW-4421: Don't require ModuleVersionMetaData for resolving artifacts

- This means that we don't need to hang onto all of the Module Descriptor instances after resolve
- Added ComponentIdentifier to ModuleVersionArtifactIdentifier
- Replaced ModuleVersionMetaData parameter on ArtifactResolver.resolveArtifact() 
  with a ModuleSource parameter
- Tidied up implementation of RepositoryChainArtifactResolver somewhat
Ensure that collection serializers retain order of entries