if there are no declarations left after we've removed the closed over but undefined decls, return an empty statement, not a VariableDeclaration with [] decls (as this breaks escodegen)
oops, fix array_new call
generate static atoms, and just general cleanup
with ejs-llvm's usage of the atom generation stuff, we need to pass the filename as an argument.
implement Array.prototype.reduce, and stub out a few more Array.prototype methods.
when allocating from LOS we still need to write the scan type to the GCObjectHeader.  fixes stage1 compiler build.
leave EJS_ATOM/EJS_ATOM2 defined so ejs-llvm can use them.
add createAnd, createZExt, and createIntToPtr methods to IRBuilder binding
lots of type gymnastics + some target platform knowledge (size of pointers) allows us to opencode the slot+slotref intrinsics.
add deps, and generate ejs.js.exe.stage# files for each stage
add a 3 arg variant for Constant.getIntegerValue (for building 64bit ints that overflow JS's handling of them), and add irbuilder support for ICmpUGt, bitcast, and select instructions
add a special cast for _ejs_object_getprop for doing 'primstr'.length.  also add _ejs_global_set/getprop which the compile can generate to keep from having to load _ejs_global all the time
for all the possible return values of 'typeof', add internal functions that just check for that type, so we can optimize things like 'if (typeof(foo) == 'object')...' into just a call to _ejs_op_typeof_is_object (or in the 64 bit cast, to inlined assembly).  Also add support for typeof(null) => 'null'
0. The compiler now has an idea of what the pointer size is for the architecture we're targeting.

1. Add support for optimizing away code of the form "typeof(something) = 'some-builtin-type'", so that the string for 'some-builtin-type' never needs to be allocated (we have builtin functions in the runtime to check for each specific type.)

2. Add a new consts.int64_lowhi function that takes two 32bit ints to create a 64bit constant from, so we can inline many of the EJSVAL_IS*/etc code directly.

3. Factor out a lot of common code to echo-util, and also add create_intrinsic, and replace all the inlined CallExpression object literals everywhere.

4. Start adding support for open coding the LLVM IR for many of the intrinsics (and other non-intrinsic calls) on 64bit platforms.

   - typeof checks against valid constant strings.  right now invalid strings result in a syntax error.  maybe they should just cause the check to compile-time eval to 'false'?
   - loading of the various constants (true, false, null, undefined, numbers)
   - getting/setting closure environment slots
bump this up to 1500 to get a real differentiation between node and ejs (ejs sucks)