Refactor. Passes jshint. Is two files. Better option parsing

This will allow us to work on ngen more easily.

Also we can now `require('uber-ngen')` and use the `Template` directly.

@dfellis @twolfson