Do compile time `with` using `with` npm module

This has two significant benefits:

1. This makes the resulting code highly optimisable using both minifiers like UglifyJS and JITers in the browsers or node.js
2. This lets you do `if (x)` instead of `if (typeof x != 'undefined' && x)` because all variables are always declared.

It does this by detecting all the "implicit"/undeclared variables in the compiled JavaScript code and declaring them at the top of the module.

The one significant downside is that it slightly more than doubles the size of the client side module due to pulling in the esprima parser.  This doesn't impact the much smaller "runtime.js" and it could alternatively be fixed by using the runtime `with` when on the client.