rewrite of the CoffeeScript compiler with proper compiler design principles and a focus on robustness and extensibility