Used PImpl in PlaylistContainer
Reuse Playlist objects in PlaylistContainer

Whenever playlists of a container are updated don't throw away the
previous Playlist objects. Instead reuse them as much as possible.
Use libspokify::Playlist for current playlist pointer in MainWindow

Comparison is now made with Playlist::operator== instead of a simple
pointer comparison. QPointer is used because it gets set to 0
automatically if the Playlist happens to get destroyed.
A Track can be added to the end of a Playlist

This new functionality is used in playlistview.cpp when dropping a track
to a playlist.
Playlist tracks get reloaded when changes in it happen

When tracks get added to, removed from or moved in the playlist the
tracks list is marked as dirty and it gets reloaded the next time it's
accessed.