Prototypes with typeclasses

This branch has a few additional random optimisations than specifically prototypes for datatypes and typeclasses, but here it is anyway.

- Prototypes for data types
- Prototypes for typeclasses
- No empty `__superclasses` anymore
- Typeclass objects now have the superclasses as direct properties rather than stored inside a `__superclasses` object
- Applications like `f({})` to force thunks are now inlined to just be regular javascript `f()` calls.
Now you mention it, I meant to check why it *wasn't* getting turned into `$$undefined`... that'd be because we're missing that case from `nameIsJsReserved`.

How do you think we should deal with this then? Introduce a new data constructor in Value for it?