This trait is implemented by any type that can serve as a type
variable. We call such variables unification keys. For example,
this trait is implemented by IntVid, which represents integral
variables.
Trait implemented for values associated with a unification
key. This trait defines how to merge the values from two keys that
are unioned together. This merging can be fallible. If you attempt
to union two keys whose values cannot be merged, then the error is
propagated up and the two keys are not unioned.