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.
Since the body is a simple method call on an `Option` stored in another val it will probably be cheaper to call `isDefined` as needed rather than use memory to store an extra member.