Reimplement HypervDisk Module Caching
Reimplement HypervDisk Module Caching

Previously this module cached data blocks read starting with the first requested
block for a minimum number of contiguous blocks.
A read request was considered a "hit" in the cache only if the entire string of
blocks was found in one cache entry.
This meant that a request could be partially found in the cache but it would be
totally read from disk again, creating some duplicate blocks in the cache.

This has now been modified so that each cache entry has a fixed number of blocks.
A read request will be filled with as much data from the cache as possible, including
partial cache entries.  Only when the data is not actually in the cache will it
be filled from disk.

This change should reduce reads required across the network and from the HyperV server
to be reduced by approximately 20% on a typically run of SSA.

aljesusg/manageiq-gems-pending,rsevilla87/manageiq-gems-pending,aljesusg/manageiq-gems-pending,rsevilla87/manageiq-gems-pending