Supply a custom $route implementation, so we can optimize.

The built-in $route doesn't give us any way to resolve a route without
switching to it, so we replace it with a new implementation that behaves
more like what we need for the server-side work.

This allows us to do provide an API to do route resolution on the server.
As of this commit we no longer support rendering a static HTML page,
but that will return in a subsequent commit.
Dispose context if request handler fails.
Restore the snapshot rendering in our custom-routing world.

Doing snapshot rendering requires a little more code now that we're handing
routes in a special way, but this commit restores the snapshotting behavior
back to how it used to be. We don't yet have the client doing
server-defined routes. That comes next.
Remove the legacy implementation.

This was the implementation we used before we started providing our own
$route implementation. It doesn't work anymore and is no longer needed
anyway.
Start of implementing the "server-defined routes" prototype.

This is an alternative implementation of $route that runs in the client
but does its route lookups via the server. As of this commit it only
knows how to handle the initial pageview where the route information is
inlined in the HTML, so navigation between pages is broken. That will be
addressed in a later commit.
Merge pull request #4 from apparentlymart/serverroutes

Supply a custom $route implementation, so we can optimize.