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
[YoutubeIE] Externalize format selection
[YoutubeIE] Add width and height to format dict
[YoutubeIE] Sort formats by resolution
Filter and sort videos before calling list_formats
Make prefer_free_formats sorting more robust
[smotri] Make optional attributes optional
[smotri] Add support for moderated (?) videos (Fixes #2030)
release 2013.12.23
Use bidiv instead of fribidi if available (Fixes #1912)
release 2013.12.23.1
Remove debugging code

Introduced by accident in 5d681e960db98ec2d9f3d4361bd66f581506a772
[bliptv] Simplify (From #2000)
release 2013.12.23.2
Merge remote-tracking branch 'rzhxeo/youtube'
release 2013.12.23.3
[youtube] Prefer videos with sound
Merge remote-tracking branch 'jaimeMF/split-downloaders'
release 2013.12.23.4