Re-write DownloadManager, DownloadThread(Worker) using
a custom thread pool implementation for speed. We don't
want to create a new thread for each url when the same
thread can be re-used.
Move all status messages from dlthread (DownloadThread) to
downloaders (YoutubeDLDownloader). Now all the status updates
(status, percent, eta, etc..) come from the downloader.
Remove OutputHandler.py
Now DownloadThread talks directly on
ListCtrl using write() method.
Add DownloadObject.py
Now DownloadObject is responsible for
downloading the video and not the
DownloadThread.
Replaced DownloadThread.ProcessWrapper with
DownloadThread.DownloadThread