First pass at type unifier

* This code is *horrible*, but unification is a hard problem, so I'm
  pushing up this version for the moment as it seems to work. Refactors
  to follow!
Uses record syntax

* To make working with TypeEqns a little easier.
Kill now-useless `eqnList`s

* Plan was originally to use actuall Data.Sets for `TypeEqnSet`s. This
* turned out to be unnecessary.
Move type data structures to their own module
First pass at type inferencer

* AHHHHHHHHHHHHH
Fixes lhs/rhs definitions borked by earlier commit