Add substitute method to Type{Variant,Member}s.

TypeVariant and TypeMember now have substitute() methods to make it
easier to replace type variables when needed (for example during cases
over something like List<Number>).
Move TCInfo to type-check-structs.arr.

TCInfo is now located in type-check-structs.arr so that it can be used
in type-constraints.arr. Additionally, TCInfo has gained a binds field
which will track the upper bounds of type variables as they enter into
scope.
Make free-vars take a list of bound type variables.
satisfies-type() now takes a TCInfo as an argument.

satisfies-type() should receive information about what's bound in the
environment, upper bounds of type variables, datatype information, etc.,
so that it can make decisions based on that if necessary.

This commit takes care of threading a TCInfo through all of the
functions which eventually call satisfies-type.