A purely functional synchronization primitive which represents a single value which may not
yet be available.
When created, a Deferred is empty. It can then be completed exactly once, and never be made
empty again.
get on an empty Deferred will block until the Deferred is completed. get on a
completed Deferred will always immediately return its content.
complete(a) on an empty Deferred will set it to a, notify any and all readers currently
blocked on a call to get, and return true. complete(a) on a Deferred that has already
been completed will not modify its content, and return false.
Albeit simple, Deferred can be used in conjunction with Ref to build complex concurrent
behaviour and data structures like queues and semaphores.
Finally, the blocking mentioned above is semantic only, no actual threads are blocked by the
implementation.