Implemented animated gif support for the ImageViewer class

ImageViewer will displayed animated gif files. Scaling is also possible.

Additionally, when the smoothing process waits 200ms, it now causes the
thread to sleep, rather than constantly loop.
When loading a new image, the image is smoothed before being displayed

Added an optional QFutureWatcher<void> argument to the smooth function
to allow it to be run without concurrency.
Added ImageViewer::ZoomToOriginalSize()

Zooms the currently displayed image to its original size. Also added
keyboard shortcut (0 key) to call this function.
Minor refactoring of ImageViewer class

Replaced NULLs with nullptr. Refactored ImageViewer::smooth() to scale
up more efficiently.
Minor refactoring of Playlist class

Changed Playlist::index() to throw an exception when the playlist is
empty. Created the Playlist::updateIndex() function to update the index
and emit an indexChanged signal.
Bug fix: prevented currently displayed image from reloading when filtering the playlist

Added MainWindow::_currentImage to keep track of the currently displayed
image. Added conditional check to see if the playlist's current item
matches the currently displayed image before loading the image.
Bug fix: Changed file type filtering to be case insensitive

When checking for supported file extensions, the comparison is now case
insensitive.