Add LanguageContext
Remove duplication from DefaultModelProcessor
Add generics type params to DefaultModelGenerator

Adding generics type parameter improves the type safety of
language/framework specific generators since it may for the user to
use correct type of DataWriter. Otherwise there might be some strange
runtime errors.
Change JMobster to use LanguageContext instead of plain writers

LanguageContext gives more flexible ways to control how the data is
written to the writers.
Add LanguageContext<W> as generics parameter to ModelProcessor

This ensures that the ModelProcessor is given the correct type of
LanguageContext. Otherwise there might be a possibility that the user
gives the processor a non-suitable context which is tried to cast to a
some other specialized context e.g. a plain LanguageContext<JavaScript>
when specialized JavaScriptLanguageContext is expected due to its
additional properties.

To make some class declarations simpler, an additional
JavaScriptModelGenerator base class is added which takes
JavaScriptLanguageContext and JavaScriptWriter as generics paramters.
Otherwise class declarations and tests would be harder to maintain because
of duplicated generics type declarations.