More direct encoding for array operations.
Renamed $ScalaJSEnvironment into $ in local scope.

This saves 5 % on the size of the generated code!
Short accessors for constructors and module instances.

$.c["java.lang.Object"] is the constructor for Object.
$.m["scala.Predef$"] is the Predef module instance.

This saves another 3 % on the generated code.
Completely reviewed constructors and their bridges.

Now for each class we have *two* constructors, which share
the same 'prototype' property. One is for use by Scala.js,
the other is the JS bridge.

Both are used with the 'new' keyword, which is optimized
better than Object.create in most implementations.

Also, both can be used for instanceof tests in JavaScript,
if necessary.

Currently prototype.constructor is set to the Scala.js
constructor. This should probably be reviewed.
Removed the trailing $ in the name of modules.

(but not of their module class.)

This is nicer from JavaScript's point of view.
Shorter (compressed) encoding of method signatures.

The new encoding is inspired by the internal encoding
of JVM method descriptors, with additional shortcuts
for Object and String.

This reduces the size of the generated code by 6 %.
Compile boxing and unboxing ops as primitives.

Boxing a value x of type Int is now
$.bI(x)
Similarly, unboxing a value y of type Boolean is
$.uZ(y)

This reduces the generated code size by only 0.5 %, but
as the bX and uX functions are written "as if" they had
been inlined completely, this should be a bit faster too.