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.
Is this method called often? It's a very slow way of doing a reverse scan. Maybe we can avoid reversing the array elements by using something like `lines.view.take(generatedLine).reverse.collectFirst {}`. (Or could try `reverseIterator` instead of `reverse`, but hopefully the view's `reverse` method will be lazy.)