Improved router->controller abstraction.

Briefly: a router now prepares a context for a controller
which implements one [or more] context interfaces.

These contexts also provide filters or wrappers which will do additional
processing on the request, and if the controller satisfies its interface,
pass that information along to the controller.

A provided sample is an authentication/session context which will read
data from (database backed) session storage and push it into a controller.