SafeCache
A thread (and coroutine) -safe cache, with automatic eviction.
When accessing data via getOrPut, the operation inside the lambda is guaranteed to only execute once for each key -- unless the previous data has been evicted from the cache.