[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/)
I don't think it's a good idea for a base class to know about its subclasses. Maybe we should move these static methods to a helper class.