Fancy progress bar and huge refactoring

Sorry I fucked up your code.

* Refactored the code so pylint has less to complain about. (For instance using 3 spaces as indentation is like, super non-standard)
* Moved everything into a `main()` function to make it more pythonic and testable.
* Refactored out a download procedure to pave way for multithreading.
* There was some unnecessary souping going on by converting everything to string and resouping, removed that.
* Tried to slim down repeated code (for instance made a variable `download_path`)

The fancy progress bar is voluntary, it tries to import `blessings` and if it fails it falls back to a dump progressbar