Cache thread safety

Changed Cache to use ConcurrentDictionary, since it's frequently used in multithreaded scenarios.  InMemoryRequestData was also changed to fix breaking tests since it was relying on an implementation detail of the Cache.