Allow a custom dispatcher to be provided to routing.

The two commits are related but independent: one allows a configurable dispatcher, the other exposes some useful internals of the existing dispatcher to subclasses.

Motivation for this change is to support automatic generation of wrapper controllers for poniard, like this: https://github.com/xaviershay/poniard/commit/8110db0328b776e9bc1442d5b5d2ffef8e51c515

As a bonus, this change is clearly useful for testing as well, since we can get rid of the ugly constant stubbing :)

cc @rafaelfranca