get @@create working.  This allows us to subclass builtins types (see
test/array-subclass1.js).
add Reflect, starting fleshing out implementation
implement Reflect.getPrototypeOf, .isExtensible, .setPrototypeOf.  add tests
add Reflect.set
expose FromPropertyDescriptor
more Reflect impl
desugar rest parameters so we can properly close over them.

Take:

   function foo(x,y,z,...bar) {
     return function() {
       return bar.length;
     };
   }

This was improperly compiled before because the rest parameter wasn't actually dealt with
until the LLVMIRVisitor was involved.  this change introduces a small pass that transforms it into:

  function foo(x,y,z) {
    let bar = %gatherRest('bar', 3); // the '3' is the number of arg offset to where bar starts
    return function() {
      return bar.length;
    };
  }

This transformation exposes bar to the normal closure conversion machinery and it gets stuffed into
an environment slot like any other closed over variable.

%gatherRest is dealt with by the LLVMVisitor in exactly the same way as it was before, except the
intrinsic handler doesn't have access to the AST function (hence the addition of the name 'bar' and
the argument offset to the intrinsic's arguments.)
update all this to keep it in line with the @@create changes
add 32 bit versions of these
use the same local version of identifiers
add a bunch of useful atoms
use Infinity/NegativeInfinity atoms here
add thisNumberValue (an es6 spec-ism) that can deal with both primitive and object numbers.  start on toFixed/toPrecision