Implemented injectable router

* Replaced Routes.setPrefix with Routes.withPrefix
* Created RoutesPrefix so that there was no direct dependency from the reverse router to the forwards router
* Applied RoutesPrefix object change to old static router
* Created new injected forwards router
* Implemented abstraction in the sbt plugin that allows selecting a routes generator
* Copied existing routes-compilation scripted test to new injected-routes-compilation scripted test that uses injected routers
The problem with this implementation is that if I have the following code:

```scala
val routes1 = Routes
val routes2 = Routes.withPrefix("/foo")
assert(routes1.prefx != routes2.prefix) // BAM
```

Well, this situation should probably never happen, because in case you want to programmatically manipulate a router, you probably want to use the injectable router instead.