AUI-1104 UndoRedo should handle async actions.

This is extening the UndoRedo module to allow for async undo/redo actions. This is done by checking if these actions return promises, and making sure that any subsequent actions will wait for pending async actions before running.
Since we now have a different concept for 'actions', I've renamed the objects sent to the 'add' function by the user to 'states' instead.
AUI-1104 Extending Undo/Redo module with a few useful functions

These utilities were added to Undo/Redo:
(1) Clear history
(2) Can undo / can redo
(3) Undo peek / redo peek
AUI-1104 Adding max undo depth to the Undo/Redo module

The user can now specify a maximum undo depth, for memory saving purposes.