Implement the context-per-request pattern

Surprisingly simple, all that's required is that we have Domain register an event with the HttpApplication.EndRequest Event to call commit only if an exception hasn't been thrown and dispose the repository.