Fire 'saveSnapshot' in setData.
Introduce editable.status.
Code optimization - better to have one listener only.
Check the status of editable in undo manager.
Introduced undoManager#lock alwaysUpdate flag.
Callback is executed when setData completed its job, so fire saveSnapshot before that.
Make sure that if no changes has been made in source mode snapshot containing insignificant DOM differences like bogus <br>s is not saved when switching to wysiwyg mode.
Avoid two getData() calls in a row by reusing data set when detaching editable.
Mentioned specific tests in comment.