DatabaseQueue: force passing playlist reference to std::bind()

Avoid implicit copy.
Playlist: add constructor and destructor
Queue: add constructor and destructor
queue: convert all functions to methods
Queue: use std::swap