Re-write DownloadManager using Thread Pool

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.