A wrapper around a value of type T that caches it until expiration time hasn't come and then recalculates using valueGetter