Removed QueueStatic

Instead, just pass the Player instance that owns the ZPlayer instance.
Replaced Next/Previous with ChangeSong

Mostly for the actual engines -- because Next() and Previous() are
pretty much identical, other than which song they're going to change to
Reworked EngineQueue

It didn't make any sense before - we were peeking instead of dequeueing
and vice versa, it seemed like.  Now, I changed things around a little
and it seems to be working fine - also, added a History to the queue
that we can use for Previous().
Implemented repeat modes

Also don't crash if queue is empty
Quick playlist shuffle implementation
Reworked EngineQueue as a staging area for Gapless

Changed Playlist.Index stuff, added helpers, added repeatmodes to
Playlist, killed History stacks as a "Now Playing" Playlist itself is a
history, Refactored ZPlayer Queue into Enqueue.
Merge remote-tracking branch 'origin/engine-improvement' into UI-playground