Refactored downloader into separate classes.

Titles.json input file isn't tested and neither is the output_dir arg.
The filenaming when there is no titles.json file is also incorrect