Make sure all change undo actions are fired before completing

The change undo action can be delayed as a result of the validation
actions evaluating. In addition, the change action also can remove rows
and/or columns. If we don't wait to call the undoneAction callback until
everything is complete we end up in a bad undo state.