REVIEW-4744: Simplified processing of client module dependencies

Instead of creating client module metadata directly from the dependency
descriptor, we now modify metadata obtained from a repository.
This means that client module dependencies operate in a similar way to
ComponentMetaData rules.
- For compatibility, need to update the returned metadata so that it always has a single jar artifact
JMock -> Spock
Added integration test verifying artifact behaviour of client modules
Client module resolver sets a single jar artifact on module metadata
Remove unused classes
Further cleanup of client module processing

- Removed ClientModuleIvyDependencyDescriptorFactory
   - ExternalModuleIvyDependencyDescriptorFactory is sufficient
- ClientModule is an ExternalModuleDependency
- Renamed AbstractExternalDependency -> AbstractExternalModuleDependency, and
  pulled up a few more common properties
- Replaced a few more JMock tests with Spock