Implement Fisher-Yates shuffle - it's fast and actually random

Using the sort method tends to result in tracks towards the beginning or end
of the playlist having a 50% chance to not move at all. Fisher-Yates gives
good distribution across the whole playlist. Performance should be pretty
decent too.