[For discussion purposes] XD-2199 & XD-1151

For discussion with @dturanski 

This PR does the following:
- convert all modules (including ones used in tests) to the "subdir format" _i.e._ using a `config/` subdirectory
- introduce dedicated subclasses of ModuleDefinition, namely SimpleModuleDefinition for the above, and CompositeModuleModuleDefinition, for the case of composed modules. That latter class contains the actual submodules' ModuleDefinitions
- use (through the use of 3 factory methods) the appropriate subclass wherever the constructors of ModuleDefinition were used. The 3rd case is the "dummy" case which should only be used in tests, where the only thing that matters is the type and name.
- For SimpleModuleDefinition, change the 'resource' field to 'location' which now points to the module _root_ instead of the definition file. In a later PR, that root can be an exploded uber jar, or an actual uber jar
- Always use a module classloader, that at least contains that module root as one of the URLs (and maybe the other jars that reside in lib/)
Yeah no, I thought about that. Can definitely do it, or at least have the exploded version be more prioritized (as in: I have that jarred module that doesn't work as I expect, I unzip it, change it and expect my changes to be taken into account, not the jarred file)