Try to get a cached instance of type T, or create one if not cached.
The result of block
Called only if the value is not already cached
Called with the (potentially cached) instance