Documented and cleaned up the code. Refactored the Cache constructor in the process
HasCache() and getCache() support callbacks to support asynchronous cache strategies