Clean up lambda expression parsing.
Clean up new methods in DisjointSet.
Remove a comment about a possible use of Rust's "ownership" semantics.

Now that I see how DisjointSet is used by the Hindly-Milner algorithm,
I no longer think that this would work.
Add a "main" module that can do type checking from the command line.
Add pretty printing of canonical types
Print out predefined symbols programatically.
Demote True and False to predefined symbols rather than literals.
Don't print extra quotes around type.
Add predefined function "if"
Bug fix: unify(a, a) caused a crash.

Previously, an attempt to unify two type variables that were already
synonymous would cause a crash in the following code:

    del self.__inferred_types[set_x]
    del self.__inferred_types[set_y]

since we can't delete the same key from self.__inferred_types twice.
Also, even if we fixed that, the following line:

    new_set = self.__inferred_types.union(set_x, set_y)

would have failed because union() requires that its arguments are
distinct sets.

We solve this by short-cutting the unification process if we see that
the arguments have already been unified.
Add a "Maybe" type.
Add .gitignore file
Add README file