Refactor `ModuleSource` The `ModuleSource` concept was a bit messy. It was designed in order to be able to store the origin of an artifact. Over time, it evolved into storing more information, like snapshot timestamps, repositories or content hash.
The code was convoluted because each part of the code was expecting some kind of module source, but because of delegation, it wasn't really possible to add/mix more sources.
This commit refactors this concept into a `ModuleSources` concept which allows storing more information about a module source, in a safe and consistent manner. No more wrapping/unwrapping, and each code requiring a specific type of module source can query for it.