AUI-1104 Add Undo/Redo module

The first version of a simple Undo/Redo module.
To use it, the user should call the 'add' function whenever a new action that should support undo/redo funcionality happens. To be used by the UndoRedo module, actions just need to be objects with the 'undo' and 'redo' functions properly defined. Afterwards, the user can call UndoRedo's 'undo' and 'redo' functions, and the module will take care of undoing/redoing the right action.
AUI-1104 Renaming 'action' to 'state'

When the async functionality is added we'll have a different concept for 'actions', so renaming the current 'action' objects to be 'states' instead.
AUI-1104 Adding a test utils file for Undo/Redo module

Y.UndoRedoTestUtils has a few utility functions to help write unit tests for the Undo/Redo module.
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.
AUI-1104 Source formatting
AUI-1104 Grunt format
AUI-1104 Allowing the user to prevent an undo or redo action

When the beforeUndo and the beforeRedo events are prevented, the undo/redo action won't happen as well.