code-cleanup: extract local variables for complex boolean operations
bugfix: avoid ArrayOutOfIndexException, when currentPos=0 and queue is
empty
bugfix: calling setPlaybackQueueMode(QUEUE_SHUFFLE |
QUEUE_SHUFFLE_REPEAT) didn't send a PlayerStatusChanged-Notification
when no track (or only one) track existed in the queue.

Fix as follows: 
- new 'internalShuffleTracks' method that doesn't send events
- 'shuffleTracks' does send events (playbackQueueChanged +
playerStatusChanged) on its own (only when tracks were shuffled) 
- 'setPlaybackQueueMode(QUEUE_SHUFFLE)' always sends a
playerStatusChanged. Sends playbackQueueChanged only when tracks were
actually shuffled.
bugfix: setPlaybackQueuePos(QUEUE|QUEUE_REPEAT) reverts the playlist to
the originally ordered playlist. It didn't send the corresponding
playlistQueueChanged and playerStatusChanged notifications. This has
been fixed.