Updating CachePlugin to use a Vary based storage

This PR is an attempt to resolve #252.

* You can now purge all responses for a given URL
* Updating CacheStorageInterface to handle hashing and purging
* Removed CacheKeyProviders. This is now handled by a CacheStorageInterface. A custom storage can be created for custom caching and hashing needs.
* Adding an easier way to create CacheAdapters
* Deprecating CacheAdapterFactory::factory()
* Debug cache headers (X-Cache and X-Cache-Lookup) are now always added
* Closes #252 

Based on Symfony2's `Symfony\Component\HttpKernel\HttpCache\Store`, cache data is now stored using 1 to 2 keys per cached response. One key is hashed based on a request's URL. This cache key stores an array of all cached responses with different Vary headers. Each entry can have a reference to a body key that stores the body of that cached response.