Start over with slightly improved approach. WIP; TODO: AbstractGeneric.
Var("T") is no longer equal to Var("T").
Union[...] is a subclass of Union.
Handle Callable eq/hash and subclass edge case.
Correctly infer the type of various methods.