We keep a tree of transactions. This allows for persistent undo by simply serializing the changesets.