STYLE: Use a delegate to control extension icon

Change how we manage icons in the extension manager to always set a
'normal' icon on the list item, and to use a delegate to override
whether the item is drawn 'disabled'. This allows us to set an
unchanging icon on the item, and take advantage of the normal drawing
code to draw a disabled icon when appropriate, rather than having to
reset the icon. Right now there is no visible change, but this will
simplify things significantly when we start using 'real' extension icons
rather than the default icon.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23199 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Add icon URL to extension metadata

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23200 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Load extension icon from disk

Change extension manager to attempt to load the icon for the extension
from disk, given the URL (which serves to provide a reasonable file
type, hopefully). For now this assumes that the icon already exists;
next, we'll want to try to download it if not.

Note that, rather than using the icon image directly, we render it as a
rounded rectangle in order to apply some rounding to the icon's corners,
for consistency with the web view which does something similar.

Issue #1907

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23201 3bd1e089-480b-0410-8dfb-8563597acbee
ENH: Implement downloading of extension icons

Change qSlicerExtensionsManageWidget to attempt to download icons for
extensions that don't already have an icon on disk. On successful
download, the icon is saved and applied to the extension list item.

Note that we will retry downloads for missing icons on first showing of
the extension manager. This seems like reasonable behavior. Missing
icons fall back to the default icon as before, and download errors are
silent.

Issue #1907

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23202 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Remove extension icon on uninstall

Tweak the extension uninstall logic to also find and remove the
extension icon, if any.

git-svn-id: http://svn.slicer.org/Slicer4/trunk@23203 3bd1e089-480b-0410-8dfb-8563597acbee
BUG: Always use same size for extension icon

Change how we generate extension icons to first resize the raw icon to
the list icon size (and then adjust the rounding radius accordingly).
While not strictly necessary for "normal" sized (128x128) icons, doing
the resize up front saves doing it on each paint, and also gives a more
consistent result for icons of other than the "normal" size. (In
particular, it fixes the text being misaligned in case of smaller icons,
which previously would not be upscaled.)

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