Extract language-specific functionality from generators
Description
See #503 for a little bit of discussion on this.
Language support is currently tightly coupled to generators, often dumped into a base "abstract" type identifying the language rather than the generator.
Suggest a fix/enhancement
It would be useful if we could move language-only definitions out of generators into a LanguageOptions type or something similar. As an example, this would allow C# functionality to be shared between NancyFX, ASP.NET Core, and C# Client generators without repeating code or requiring that they all extend AbstractCSharpCodegen. Divorcing our generators from language in this way would allow us, for example, to generate these frameworks in different languages (such as F#).