6.2.1 u4 4931

Should fix issue: http://issues.umbraco.org/issue/U4-4931

Most of the comments relating to this are found on stephan's PR:

https://github.com/umbraco/Umbraco-CMS/pull/384

Here's what the fix does:

* Removes allowing recursion on the locks on the underlying DictionaryCacheProviderBase and ObjectCacheRuntimeCacheProvider
* Changes the locks on DictionaryCacheProviderBase and ObjectCacheRuntimeCacheProvider to not be static since they should *not* be shared instances for any overriding classes. Since these classes are also global singletons there's no need to have them as static
* Only upgrade to write lock in GetCacheItem with the delegate when we are actually going to write to cache, not before we get the delegate result
* Fixes the umbraco.cms.businesslogic.ContentType.PropertyTypes {get;} property to not overcache - this is most likely the entire culprit of this whole issue. There's no need for this to globally cache it's property type collection when we are already caching each individual PropertyType. This will save some memory too.
* Fixes the legacy umbraco.cms/businesslogic/member/Member class to just insert the cache instead of calling GetCacheItem to force it to cache but not using the result value

Just need Stephan to review.