Refactored qtype unification to a common driver, and with deferred self and final type construction. This allows checking of recursive annotations