FFmpeg: Don't allow same input & output

Makes it harder to cleanup canceled operations
Don't attempt to delete file if it doesn't exists
Huge (forgot-to-git) commit

- Separated most of classes to their own file
- Improved IOperation
- Improved IOperation context menu
- Improved PlaylistOperation, can't remember everything
- Improved DownloadOperation, again, can't remember everything
- Privated IOperation properties that shouldn't be changed from outside
- Use Web* instead of HttpWeb* classes
- Add static methods for getting program folders
- Removed FFmpegHelper.CombineDashThread
- Replace RunningDownloaders & RunningWorkers with a single
RunningOperations
- Moved identical delegates to their own files
- Handle unfinished file deletion in their own operation classes