Issue 47

Added getAll(), putAll() and removeAll() implementations with reader and writer support. The code in the cache layer should be versatile enough so that the store layer has a lot of flexibility on how it wants to load the keys.
Why is the argument to this function not typed simply `Iterable<? extends K>`? You are not using values for actual mapping - neither does `CacheWriter.deleteAll()`.