use a concurrent queue to store results for look ahead
split memory caching functionality out of UnboundedCache and into its own MemoryCache