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).
The purpose of the Func<HttpContextBase> is required because HttpRequestCacheProvider is a singleton (global) but a current HttpContextBase is NOT, it is request based. So we need to provide it with a callback to return the 'current' context.

The overload that doesn't provider a Func is basically just for testing.