HttpApplication to get Dispatch info, execute and execute result separately

This adds some events to HttpApplication, so that modules/middleware can listen to different events
and step in / modify at these stages:

* Before dispatching
* After a controller/action/args have been set (you could change these)
* Before / After the action executes
* Before / After the action result (view etc) is executed

This gives a fair bit more flexibility to the module system...