Change structure of generated Python code

* Each module is wrapped by a subclass of FortranModule
* Each type is wrapped by a subclass of FortranDerivedType
* Types are defined within Module classes
* Module classes are singletons, and are instantised on module import
* functools.wraps() no longer used, we will build our own docstrings