Refactored routes compiler

* Separated concerns, models classes, parser and compiler live in separate places
* Switched to using twirl to generate the router

I didn't change any actual functionality.  Most of the complex generation logic is in the templates package object, this is where most of the complex data structure manipulation and processing is done, and where things like method signatures are generated.  In general, I've tried to strike a balance between readable template, and readable generated code.
Probably because we want to return the result - if it throws an exception, we want to return that.  Technically, foreach will allow that, but if this was a future, then it wouldn't.