Add type arguments and pass params to object definitions
Rework language module compilation for #152

This change improves performance significantly and allow for Iterable
and possibly other classes such as Sequential/Empty/etc to be compiled.