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.
Both removAll() and putAll() use `Store.bulkCompute()`. The latter simply takes a parametrized function, whose first generic parameter is an `Iterable` of something (the type of the actual argument to the function). Based on usage so far, that something can be typed for simplicity `? extends K`, which would make type definition shorter easier to read if values aren't needed for the function to do what it needs to (they aren't in the usage I'm seeing so far).

Basically, what I am saying is - make the function take a sequence of keys and produce a sequence of map entries, unless entries are anticipated to be needed as input to the function as well.