ThreadSafeProgressDialog fix

Handled the rare case of the parent dialog being disposed before the
thread's Run() method finishes.

Adding a check for m_parent.Owner == null in the "finally" block of the
Run() method.

Using this class in ScreamTool we found that there are rare occasions
where the progress dialog is already disposed by the time the Run()
method in the BackgroundThread finishes. m_parent.Owner is already null
at the start of the "finally{}", before "lock (this)" is called. When
that happens, code which tries to re-show the thread's parent access a
null object reference.

Where this problem surfaced in ScreamTool (SCRSVBUG-2259) the action
being performed behind the progress dialog took virtually no time
(immediate return; no work to do). So the resulting short lifetime of
the ThreadSafeProgressDialog probably improved the bug's chances. Even
so, it took extensive mouse button bongo drumming to reproduce it.

Checking for a null reference seems like a simple and safe way to deal
with it.

(from lstlezin)
History Lister feature

Added the History Lister component, which allows the user to visualize
the undo/redo stack. The user can click on the list to undo or redo a
large number of commands. The maximum # of commands visible is a
user-editable property, and the default is 150. (from Alan)
Reworded the recent HistoryLister's user preference text.