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.
I just noticed all these examples mention `Router` and have the wrong method name, I'll update all the examples and remove pointless features like prefix + plugin option. Those can just be set through parent scopes.