Improved interface generation: construct_destruct example does not generate a the movable interface twice.
Mostly got construct_destroy_global test working.

This turned out to be rather more work than I expected; I ended up
removing DerivedType because it's far to complex to try and track upward
references without full pointer semantics. I added UpwardReferenceNull
so I don't have null pointers floating around which are tricky to deal
with. I added an IntroduceExists term to TVM since it's a lot easier to
manage exists quantification manually than to try and automatically
detect all cases.

For some reason, the copy constructor used in construct_destroy_global
does not do what I expect (i.e. 'Construct' is only printed once). I
must investigate whether this is a bug or I just expect wrong.