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.
That makes matching in the optimizer a little trickier, as the value can be either `JSVar "unused"` or `JSAccessor "unused" (JSVar "Prelude")`, depending on whether we're in `Prelude` or not, but if you're ok with that, sure.

If we're going down that path, maybe we should just use `Prelude.unit` rather than introducing a new special value, as `unit` removal will benefit elsewhere then too. We just have to keep in mind that `unit` is never a readable value for pattern matches and the like.