[BREAKING CHANGE] Refactor history state methods to better suit uses

canUndo/Redo now check for disabled state (for use by history buttons)
and add a hasBeenModified method (for use by save buttons).

Change-Id: If7d7a3ea110b67d57375c20e57bd776ff03c40ad
Add system to dm.Surface for staging changes

Pushing to the staging state stack causes all transactions
to be stored in a list at the top of the stack. Popping the stack
undoes those transactions and returns them. Applying
moves the transactions down the stack or into the undo stack.

Change-Id: I607d37591eb3e239a59047be0472627d48d267b1