Separate the request callback from the global data callback

The new request callback no longer returns global data. This is now done
independently, and global data is requested after the controller is
called, but before the template is rendered.
Move towards context driven requests

Each request now creates a context. A context is an object that
implements ContextInterface, and acts as a data storage for each
request. This makes each request thread-safe.

Controller methods now accept the first parameter as the context, and
they should do any data retrieval etc. and store output into the
context.

Controller methods no longer return anything. Instead, the context
should provide data storage locations to the controllers, as the
template engine is now passed the context as it's data source.

The context should set up the logger, and allow controllers to set a
view override, both of which are returned by the methods required by the
ContextInterface.