First pass at splitting up the Router internals.

ScopedRouteCollection has a few too many jobs. It handles both the
building of routes and part of the route parsing/matching. Having the
parsing/matching spread between two classes is a bit gross and indicates
there is a missing class. Separating the building + parsing/route
storage makes a nice break that allows each class to handle one group of
tasks. This division also cleans up Router which is nice.
Only sort routes when new paths are added.

Remove complexity and nested statements where possible.
Remove sprintf() calls.

The extra loop and function calls aren't necessary.
Further cleanup and test expansion.

Clean up the last bits and finish off the tests.
Stop inflecting prefix.

Inflecting prefix causes issues with reverse routing as prefixes are
always connected as snake_case versions. Inflecting on parse/match
causes match errors.

The ControllerFactory changes are required to make namespaces match
correctly.
Fix failing tests around prefixes.

There were commented out tests for prefixes + controller routes. Using
a prefix should create more specific route names that match earlier
preventing names like `users:_action` from matching.

* Fix up name generation for plugin/prefixes with 0 as a name.
* Remove bad Controller test for prefix.
* Remove duplicate route prefix test.
Add tests for Route::staticPath().
Remove unused method.

Prefixes are managed very differently now, this method is not needed
anymore.
Fix doc block errors.
Fix docs and add missing test coverage.
Add test for added cases in RouteCollection::_getNames()

The additional prefix names are needed for cases like this test.
Uncomment accidentally commented out test case.
Merge pull request #3898 from markstory/3.0-route-collection

3.0 Router cleanup
Correct typo.
Remove unnecessary setters
Remove reference
Change the way the TableNameExpression is quoted when autoQuoting is set to true
This changes prevent a instance of the driver to be stored in the TableNameExpression instance. It simplifies the TableNameExpression and restore the way the table name alias are binded in the query.
An expression should not be prefixed
Merge remote-tracking branch 'upstream/3.0' into 3.0