Avoid using the cache for module artifact set when result can be calculated cheaply

- Added LocalArtifactsModuleVersionRepository which allows 2-stage artifact set resolution
   - Initial resolve is cheap and local-only. If resolved, then result is not cached.
   - Otherwise, we check the cache for a previous value, and store any calculated results in the cache.
- This is not a great solution: it would be preferable to push caching down to the resource layer, so that the existence of an artifact is cached. This would required integrating the cache timeouts into the resource layer.