Rework downloads

Reworked the image download process.  Threads are re-used, so performance while actively downloading may be increased because there is less overhead from thread creation.

The new download process also facilitates error handling better.  There is now a retry dialog when a download fails (ex: lost internet connection).  Only one popup is allowed at a time so that the user doesn't get spammed if a bunch of images fail to be downloaded due to internet connection issues.  Clicking retry on this dialog will cause the application to requeue the accumulated failed downloads.

Closes #72