Revert the removal of chain::use_state.
Revert the removal of chain::use_state.

chain::use_state is still broken in multi-threaded contexts, but is
necessary for single-threaded contexts (as it flatten the dependent
calls and avoid recursion).

tim42/tools