Reimplement options as es6 class CompileOptions.

CommandOptions extend CompileOptions with commander-specific
features.
Add tests for CompileOptions and CommandOptions.
Our current approach to options passes global values through module instance variables
combined with passing them as arguments. Chaos ensues. We need to pick one of these three.
Passing arguments from the API provides the most control and flexibility. We may continue
to use the global deeper in the call stack, after we are below the API calls. 
use assert.throws