CacheProxy refactored, cleaned up

* CacheProxy refactored into three classes. 
* CacheProxy related checkstyle issues fixed. 
* Code duplicates removed.
* LoadAll async behavior is fixed.
* ICache doc improved
* ICache API addition, two async methods
This method can be quite cosly since value is an array that is created. So you get more object litter and this causes more unpredictable latencies/throughput.

What I often do is to create one with an explicit single arg value (no array object needed) and potentially one with no value argument at all. And then potentially one for an array if multiple values can be passed.