create () returns a new tail.
extend t v extends the stream, and will raise an exception if t has been
closed.
close_exn t closes t. Subsequent calls to close_exn or extend
will raise an exception.
close_if_open t closes t, if it's not already closed. If t is already
closed, then this is a no-op.
is_closed t returns true iff the stream t is closed.