Typechecking-elaboration of typeclass declarations.

 - Normalization of superclasses is performed: [A 'a, A 'a => B 'a] is
   simplified to [A 'a => B 'a], and if [A] is a superclass of [B], then
   [A 'a, B 'a => C 'a] is simplified to [B 'a => C 'a].
 - A simple mangling is performed. If a class [K] is defined in MH, it will
   use the elaborated type [__mh_c_K], and if class [A] is a parent of class
   [B], then the type [__mh_c_B] will have a field [__mh_s_B_A] to access the
   parent dictionary. Class members, however, are not mangled - if class [K]
   define a field [f], then the elaborated record type [__mh_s_K] will actually
   have a field [f], which could cause conflict.
   This name mangling isn't robust (nor is it intended to do so), but should be
   enough during development and for simple testing. It could obviously cause
   unwanted conflicts in real applications.
Add class parameters in values

The environment now keeps track of class requirements in the values.