[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/)
You're absolutely correct, this is still in flux. Things that only pertain to composite will go down in ComposedModuleDefinition (same for "location" that will only go in SimpleModuleDefinition, if this hasn't been done already).
We *do* need some kind of polymorphic check though, so it's either `isComposed() in the super class`, or `instanceof` checks, or usage of the visitor pattern (which may not really make sense here). Pick your poison. I know M&Ms are not fans of instanceof.