Micro optimize Route.

Calling empty() instead of a userland function is a teeny tiny bit
faster.
Add ScopedRouteCollection

Pull the changes from my prototype branch into a less experimental
branch.
Start adding tests for ScopedRouteCollection

Make extensions an instance property instead of a global static that is
pulled in on each connected route. Having instance properties will allow
scopes to have different extensions if desired.
Add tests for redirect().
Add ability to set Router::scopes() and use prefix()

Fix problems and add tests.
Add basic tests for Router::scope().
Add tests for plugin() method.
Add test for parse().
Add tests for match().
Add tests for resource().

Still need a few more for the various connected routes.
Update doc blocks based on feedback.
Rename resource() to resources().

Using the plural form makes more sense as the table names are plural and
controllers are plural too.
Merge pull request #3800 from markstory/3.0-scoped-routes

3.0 scoped routes