add a new specialized GenericRegister class

Instead of abusing VariableRegister (which leads to annoying
workarounds and constant casting), add a new specialized class
for keeping track of generic types and variables.
fix metamodel for recent syntax changes: use ParamDeclaration class for params
interpreter: move environment setup to helper method
rename GenericRegister methods: now changeable
fix GenericRegister: types are no longer stored by name
small fix to isGeneric()
fix param type matching: use common type

When expressions of two different types are passed for parameters
of the same generic type, do not use the first type and fail if the
second is a super type. Instead, always use the common super type.

Closes #37.
move param type mathing to an own judgment (see #37)
add small test for new type matching
common base class for func and proc declarations
allow funcs and procs to declare additional generic type / number parameters

As described in #13, funcs and procs can now use and return generic
types that are not inferred from their parameters.
remove obsolete generic check auxiliary
move some generic type check logic to metamodel
add helper method to MatrixSyntaxElement to find container of given types
add metamodel and syntax for additional generic arguments in calls
abstract from func and proc calls with CallableInvocation<T>
adjust scoping for callables
fix StdlibUtil for generic arguments in calls
add typing semantics for generic arguments

Add them to the generic register. This also enables
proper interpretation. Also, rename the responsible
judgment. Adjust and simplify xecuteWithParams() and
rename to executeCallable().
a small test for generic arguments