Expand Router's `req` objects and refector `_dispatch()` method to take `req` and `res` objects

This adds two new properties to Router's `req` objects:

* `route`: Reference to the current route object whose callbacks are being dispatched.
* `router`: Reference to the router instance.

This also changes Router's dispatching process to take `req` and `res` objects before dispatching to its router handlers. This gives control to the code with triggers Router to dispatch to create the `req` and `res` objects. 

Previously, router would create the `req` and `res` object inside its `_dispatch()` method and pass them along to the route handlers. Now the `_dispatch()` method takes `req` and `res` objects allowing the places that call the method a chance to create these objects.

### Todos

- [x] Decide whether `req.referrer` should be added #1181 
- [x] Add more tests
- [x] Add HISTORY.md entries
- [x] Add more docs (like new `req.src === 'dispatch'`)
- [x] Note BC breakage with dropping support for `res()` instead of `next()`