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. 
We use Object.keys() and the enumeration issue is reduced in this version because these functions are now on the __proto__ (not Own).

This version suffers from the opposite problem: modules being a getter is not enumerated by keys().