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()
* Closes #252