Use normal methods instead of helpers in the IR

Hijacked classes are now much more normal than they used to be. Methods can be called on them, they have proper IR that can optimized in a regular way, etc. Basically, the fact that they are hijacked only has the following consequences:

* They do not have constructors. Instead, their "instances" are values of primitive types (or whatever representation thereof, e.g., `RuntimeLong` for longs).
* `Apply` nodes to maybe-hijacked classes that survive the optimizer are desugared into calls to helpers.
* The `ScalaJSClassEmitter` does not emit code for them (only class data).

Basically, this means that the IR of hijacked classes is only ever used by the optimizer if it can inline the methods. Otherwise, the desugaring ignores it.
Oh yes it will. But who cares? You should not use floating point numbers in hash tables anyway, because strict equality on fp numbers is rarely what one wants. You don't want to penalize hashCode on integers for that.

What we *could* do is a more complicated hash for doubles so that whole numbers have the same hash as integers, and fractional numbers have something else. But that is for another PR anyway.