3.0 Router cleanup

The ScopedRouteCollection class felt a bit messy to me, so I decided to split its roles out into a RouteBuilder and RouteCollection. I also found a few vestigial pieces of code that I removed.

One notable change I did was to shuffle the inflection to for prefixes. I don't think it is expected that one would have to use `'prefix' => 'Admin'` in their reverse routing. I'm happy to revert this part of the change, but we will need to update the RouteBuilder and docs accordingly.
While there is a bit of duplication here, I thought it was simpler than having nested loops with array merging.