Better --overwrite handling.

It makes no sense wasting time and bandwidth if the file already exist.
It is better to check if the file exist before doing anything
Fix documentation: DownloadFailedException has been renamed in DownloadError long time ago
Better error handling and error messages
Code and architecture cleanup.

Try to have a better module split and avoid useless classes.
Fix broken retcode (was already returning 0)