ENH: Hook up UI for updating extensions

Hook up update availability and download progress reporting in extension
model. Add UI to extension manager to report update availability and
allow requesting updates and canceling such requests. This brings update
management almost to full functionality, missing only to actually
install the update on restart.

Issue #2089

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23502 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Improve UI update scheduling

Improve update handling to enable 'restart' button when appropriate due
to update-related actions. Disable updating of extensions scheduled to
be uninstalled (the model already does this, but having the button
enabled makes for a confusing user experience where clicking the update
button does nothing).

Issue #2089

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23503 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Implement installation of updates

Implement installation of updates to extensions (consisting of first
removing the old version, then installing the new version). Note that
this will attempt to install new dependencies as well. Also, change
handling of update downloads to additionally write the metadata for the
update (in addition to the archive), as we'll want it when we install
the update and need to persist it across a restart.

Issue #2089

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23504 3bd1e089-480b-0410-8dfb-8563597acbee