[WIP] First step towards new generics (#796) This is the first step towards the new Generics design (see #679). This pull requests adds support for template generics. The behavior of existing code should not change. To use template generics, add a colon (`:`) after the type parameter name. (commit: e1eee11)