Requirement()
A requirement creates and holds a Future, which represents the value once satisfied.
#satisfy() returns the existing future. Otherwise, it creates a new one. An existing future can be invalidated (#invalidate(), so that a future call to #satisfy() will create a new one.