Use component id rather than module version id in the 'required by' paths in resolve exceptions. This provides a better description for local components, and also allows for components that don't have a module version id.
Added more detail to the 'could not find any matches for selector' error message, to distinguish between: 1. No versions were found. 2. Some candidate versions were found but none matched the selector (and what those versions were). 3. Some matching versions were found by all were rejected by component selection rules (and what those versions were).
Changed ModuleVersionResolveException constructor so that it does not pass the provided message through String.format().