3.0 scoped routes

This is the first part of #3693. It adds the `ScopedRouteCollection` class which will eventually replace `RouteCollection` and form the underlying API for the new router features.

A few interesting features to note:

* Each collection can have extensions set independently.
* There is currently no way to modify the mapped resource methods. I don't really like the global setting we currently have. I'd prefer to allow customizing the methods via the options parameter, and will do that in a separate pull request.
* There is no way to set the default route class. I don't think this was frequently used, and it might be a pointless feature to have given the `routeClass` option.
The count is only executed once at the start of the loop.