Make new_type_var() responsible for updating __inferred_types.
Remove debug prints.
Improve the test utility functions
Add built-in functions for handling pairs
Test the types of the "curry" and "uncurry" functions from Haskell.
Add a testing utility function: "mk_fn".
Add a more complex test of "let" partial generalization.
Add a "DisjointSet.element_type" for run-time type checking.
Get rid of primitive obsession in Monotype class.
Clean up Polytype class.
More documentation.
Clean up assertions in visit() to refer to DisjointSet.element_type
More documentation.
Ensure that check_invariants() occurs only during unit testing.