[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/)
Sorry, but this is not GoF to the letter. In GoF there are 2 factory patterns: Abstract Factory (where concrete factory subclasses are used) and Factory Method (where subclasses of the concrete types can override the factory method defined in the parent class). Neither of those patterns violates the rule that David mentioned: the parent class should not depend on child classes.