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#).