It seems to me that Zope could really do with a redo facility. Instead of the complete version being the latest, it is one signified somehow as the current version that can be undone by going backwards or redone by going forwards. The versions in the DB going in both directions are diffs from the versions nearer the current version. Where one object refers to another, a link could be recorded between one version of an object and the version of the the other to which it refers. Split a pickles into sequences of operations.
Pickles are basically series of op codes with arguments.
I've never used ndiff, I don't know how well it works. I've been meaning to try it form some time. If you use text pickles instead of binary pickles, I think you don't even need to use ndiff. A regular line-based diff utility will do just fine, because the text pickle format consists of many short lines. The pickle format includes newlines at the end of almost every object.