The long-lived filesystem session.
@type handle() :: non_neg_integer()
@type t() :: %Exfuse.Socket{ assigns: map(), id: term(), mount_point: String.t(), state: term() }
@spec assign(t(), atom(), term()) :: t()
@spec delete_handle(t(), handle()) :: t()
@spec fetch_handle(t(), handle()) :: {:ok, term()} | :error
@spec get_assign(t(), atom(), term()) :: term()
@spec new(String.t(), term()) :: t()
@spec new_handle(t(), term()) :: {handle(), t()}
@spec put_handle(t(), handle(), term()) :: t()
@spec put_state(t(), term()) :: t()