LT-14765 PropChangedCompleted -> DoAtEndOfPropChanged

An event on the action handler proved to be a poor choice for
getting things to happen at the end of a UOW. For one thing, the
event is triggered at the end of every UOW, but all the actions
we want to associate are supposed to happen in connection with a
particular UOW, either once when it first happens, or every time it
is done or undone. But not when other UOW's are done or undone.
An event on the UOW might work, but that is not a public object.
So I decided to change it to two methods that can be passed tasks
to do at the appropriate time. Based on usage there is one that
does the task once at the end of the UOW, and one that does it then
and also on every Undo/Redo.

Review notes: see IActionHandlerExtensions and the implementations
in UndoStack for the core of the change.

Code ADDING PropChangedCompleted handlers changes to
a call to one of the new methods.
Code REMOVING a handler goes away (sometimes a whole Dispose override,
if it does nothing else significant).

The one thing lost in this approach is that there is no way to check
whether a particular task is already listed to be done. This is only
annoying in one place, where it may lead to a redundant reload of a
list. I don't think this will be frequent, if it can happen at all;
it's only called once in the course of reloading another list, or
during initialization.

There is possibly more to do to fix the original problem, but this much
prevents the crash (though Asserts may still be seen) and possibly
other similar crashes.

Change-Id: I9e8de9c5cb262bb04ff798e139635830fd3a9b50