Refactored type building

`adt.single` and `adt.record` no longer return a constructor, but
a constructor factory that is then invoked by `adt.data`. Consequently,
there is no longer a need to splice the prototype chain. This also lets
the `adt.single` factory function return an instance, eliminating the
need to call it with parens. All around much cleaner.