Check that value is tuple before unpacking
Check number of type parameters during instantiation
Add is_instantiated_sub_type for generic types
Raise error if explicit type does not match actual type
Move verification of inferred type into infer function