types2: implement correct upper bound unification on assignment - still missing the 'lower bounds' when reading a mutable variable