A "force_once" is a thunk that can only be forced once. Subsequent forces will raise an exception.
create f creates a new force_once
create f
force t runs the thunk if it hadn't already been forced, else it raises an exception.
force t
ignore () = create (fun () -> ())
ignore ()