Pluggable Cache Key creation, Ability to cache IEnumerable<int>

-Abstracted the original MD5 cache key creation to ICacheKeyProvider where user can provide their own implementation to create a CacheKey (MD5, SHA1, etc)

-Added ability to cache IEnumerable<int>

-Originally added Async support, but this was added in between my fork and merging master branch in