Allow the user to undo and redo changes. Changes should be committed on the change event of the input, and undo and redo levels should be infinite. Enhancement: Support Ctrl+Z/Ctrl+Shift+Z/Ctrl+Y keybinds. Enhancement: Treat undo/redo as a tree.