Implemented a *non-scalable first revision of "infinite" persistent
undo/redo support.

*non-scalable because there is no maintenance performed on the undo/redo
stacks. Not so important for the redo stack - only in special many-undo
scenarios. However, there is a scalability issue with the undo stack
because it mostly just grows which, at some point, will likely become a
memory-usage issue.

Signed-off-by: Jakob Brandsborg Ehmsen <jakobehmsen.github@gmail.com>