2 optimizations wrt no# short living objects we create
1. IOEngine#read call to read from L2 cache is always creating a Pair object to return the BB and MemoryType. We can avoid this by making the read API to return a Cacheable. Pass the CacheableDeserializer, to be used, also to the read API. Setter for MemoryType is already there in Cacheable interface.
2. ByteBuff#asSubByteBuffer(int, int, Pair) avoids Pair object creation every time as we pass the shared Pair object. Still as pair can take only Objects, the primitive int has to be boxed into an Integer object every time. This can be avoided by creating a new Pair type which is a pair of an Object and a primitive int.