DESC
Redo the commit procedure to allow true transactions that affect several
portions of the file.
EDESC

This is a big rework of the commit procedure, which make transactions really
useful by bundling operations up and apply all of them atomically, which is
what one would expect.

So now you create a transaction, add some operations to it (writes to
different offsets) and then commit it as a whole.

It's a big patch, it could have been splitted in more parts (ie. the move of
jfsck() is pretty much orthogonal to this) but as I'm changing code all over
the place this is easier to work with.

