Added a compression content functionality.

The idea of this change is to allow the user to choose a different storage provider.
I implemented a new provider that offers given functionality.
Also I added a new setting called StorageProvider. Base on that setting, I do create the instance of chosen storage provider.

New provider inherits from MemCache class and overridden some methods. Overridden methods before calling the base methods do perform compression/decompression before passing values to the base class methods. Compression/decompression methods are wrote as asynchronous methods and they are using the new CopyToAsync functionality offered in framework version 4.5. This is also the reason why the I also upgraded the projects.

This can be beneficial to the users that will trade the compression/decompression overhead for the lower memory footprint.

Cheers