Move fork/transaction onto the DataState class.

We still provide passthroughs on the root, but they will now always act
on the root state, not on the current state. The idea is to allow the
caller to treat the root as a state.
Make Root a kind of State rather than a wrapper.