Another try at Fixing the Fixpoint crash issue

As discussed in #80 upcasting can be tricky when it comes to copying over refinements from the source to the target type.

One particularly vulnerable spot was upcasting when joining environments where the two types differed by a " + undefined". What happens now is that the Phi var used gets an explicit UpCast operation to handle that. The mechanism that handles UpCasts seems to be more stable.