Move bytecode router code around
Change the router interface slightly

Make the bytecode runner return the route that we're going to use. It's
up to the router itself to dispatch to that route.

Besides feeling a teensy bit cleaner, this refactoring is to prepare for
a "Router" middleware, which will allow application developers to
control when in the middleware stack routing occurs.