Type Providers with code generator, customised name mapping and type mapping

This PR contains code generation in addition to the features introduced in #130 and is revised version of #134.