initialization speedup and massive compilation speedup due to three changes:

1. switch from using global 'exports' to a local binding.  in uikit.js we do:
      let _exports = exports;

   and in every binding file instead of:
      exports.Foo = Foo = ...

   we do:
      _exports.Foo = Foo = ...

   This results in the llvm visitor being able to treat _exports as a simple local binding backed by an LLVM alloca.

2. introduce 'let' bindings to keep globals from being created during initialization.
   in the UIKit binding files we change this line:
      _exports.Foo = Foo = ...

   to:
      let Foo;
      _exports.Foo = Foo = ...

   This switches all the package local bindings to be local to the toplevel function (or to the closure it creates.)
   This results in a pretty huge savings, as the original form required both a call to _ejs_global_setprop and
   _ejs_global_getprop.  The second form uses the opencoded form of _ejs_closureenv_set_slot/get_slot, where the
   slot number is fixed at compile time.

3. Switch from passing large object literals to .extendClass to passing anonymous functions which return the
   object literal.

   That is, switch from:
     _exports.Foo = Foo = Bar.extendClass("Foo", { ... })

   to:
     _exports.Foo = Foo = Bar.extendClass("Foo", () => { return { ... }; })

   This forces the closure conversion passes to lift the IR for creating/populating the object literals out to separate
   small functions, and greatly reduces the number of IR instructions in the uikit toplevel function.  The original # IR
   instructions was ~16k, and the new form is ~4k.  This drops compile time from 60 seconds down to around 15.