Now a new FileDownloader is created when downloading a video

The progress hooks can be added using the method "add_downloader_progress_hook"
Move FileDownloader to its own module and create a new class for each download process

A suitable downloader can be found using the 'get_suitable_downloader' function.

Each subclass implements 'real_download', for downloading an info dict you call the 'download' method, which first checks if the video has already been downloaded
[youtube] Prefer videos with sound
Merge remote-tracking branch 'jaimeMF/split-downloaders'
release 2013.12.23.4