Made routes compiler its own plugin

* Improved the structure of routes compilation, so that it's more configurable
* Made the incremental compilation good
* Took many of the old integration tests for the router and turned it into a scripted test
* Wrote scripted tests for incremental compilation
* Included mocha tests for the JavaScript reverse router in incremental compilation

Essentially here, instead of throwing an exception on the first error found, I'm collecting errors.  I didn't want to modify this code too much - but because the old mechanism of throwing an exception broke early, I decided to instead collect errors in a mutable list.