A write-once cell that can be empty or full (i.e. hold a single value).
One can read an ivar to obtain a deferred that becomes determined when the ivar is
filled. An ivar is similar to an 'a option ref, except it is an error to fill an
already full ivar.
create () returns an empty ivar, create_full, a full one.
fill t v fills t with value v if t was empty. If t was full, fill raises
an exception.
It is guaranteed that immediately after calling fill t,
is_some (Deferred.peek (read t)).
fill_if_empty t v fills t with v if t is currently empty. If t is full,
then fill_if_empty does nothing.
is_empty t returns true if t is empty
is_full t returns true if t is full
peek t returns Some v iff t is full with value v.
value_exn t returns v if t is full with value v, and raises otherwise.