Implemented HttpRequestHandler abstraction

* Pulled onRequest, routeRequest, filter etc methods out of GlobalSettings, and put them into a HttpRequestHandler abstraction.
* Introduced HttpConfiguration abstraction to abstract out http configuration
* Rewrote Scala documentation on intercepting requests
* Didn't rewrite Java documentation on intercepting requests - felt a bit like yak shaving
I know it's existing behaviour, but it feels like these should be `def`s so that they can change when the application or application configuration changes.