using new trick to exclude multi equation component of Variable
definition from default equals and hash code.
state sets added to the basic type system
removed ErrorType and ErrorValue. Types are now represented as
Option[Type] in contexts with None representing an inability to
assign a type due to a type error.