U4-4931 - 6.2 - lock contention & potential application lockdown

See details in issue tracker, this is #384 and #388 re-targeted for 6.2(.2).
Looking into it... if we remove the locks then it is not thread-safe. Granted, during a request, you're not supposed to do multi-thread stuff... until someone starts doing some async work.

Another question: what was the purpose of the ctor accepting a Func<HttpContextBase>? So you could have only 1 instance of the provider but caching things in different places depending on the request?

Thinking about it... I'm happy with the HttpRuntime cache provider (will commit a small perf improvement, though) but I'm not sure about the HttpRequest one, mainly because I'm not sure what we're trying to do with it exactly.