Glimpse v2 - Reworked script tag generation and injection

This is a suggestion / first draft / solution :wink: for #791 

This removes the hacky approach inside the GlimpseMiddleware regarding generating and injecting the Glimpse client script tags.

Approach details:

- The `IRequestResponseAdapters` exposing the outputstream as well as the Content-Encoding (beware for OWIN there is no such property and defaults to UTF8 as it was in the hacky approach)

- The `PreBodyTagInjectionStream` is now wrapping the initial output stream as from `BeginRequest` (this might solve compression issues we had before, but to be tested)

- There is now a `ScriptTagsProvider` defined on the `IGlimpseRequestContext` which has a method `DetermineScriptTags` which will be used by the Glimpse Client controls and also by the `PreBodyTagInjectionStream`. This provider will use a delegate to decide whether or not it should generate the script tags when somebody wants them). This delegate will be provided by the `IGlimpseRequestContext` and will decide based on the `CurrentRuntimePolicy` and the `RuntimePolicyDeterminator` which is used by the `GlimpseRuntime` as well. The difference here is that the result of this determined runtime policy will not be assigned to the `CurrentRuntimePolicy` (at least that is the case for now)

- There was a need for the separate `ScriptTagsProvider` as relying only on the `GlimpseRequestContextHandle` from within the `PreBodyTagInjectionStream` would fail due to the different moments on which the `PreBodyTagInjectionStream` is actually used. In short: with the `GlimpseMiddleware` the tags will be generated in between `BeginRequest` and `EndRequest` while in the ASP.NET eventmodel, the `EndRequest` will already have executed when using the _filter_ approach, and since the `EndRequest` does a cleanup of the handle. The previous approach would render the scripts and attach the injection stream on `EndRequest`, hence bypassing this issue.

- Some additional comments will be added to the different changes that will illustrate the remarks made here
this is new now, it the sense that we support multiple flushes now without adding false positives inside the glimpse.log file (See `Close` method). There is one side effect and that is that since we need to treat each flush as the potential last flush we will do, we will do the matching and injection if needed as if it was the last time. This means that if between 2 flushes, 2 entries of `</body>` show up we will do the injection twice, but with the knowhow that the options will only return the real script tags once and the next times only an empty string. So the tags will only be written once, but potentially sooner than at the top.
Now we have had issues like this before with users having the `</body>` inside string literals which got injected with the script tags instead of the last one on the page, but as we can't fully rely on only one Flush happening to do the final check/injection/flush we need to make a choice here...

Maybe we could change the logic that if the `</body>` is being followed by a lot of other characters not being the `</html>` tag or so, that we say it is not a match?

Maybe we could look for `</body></html>` tag instead of only `</body>` (ignoring whitespace between those 2 tags)?