Split responsibilities of MemoizedCacheProxy

MemoizedCacheProxy should only be responsible for memoizing. Cache
fetching responsibility is moved to a new CacheFetcher class.