Shuffles an array using Durstenfeld shuffle algorithm.

Note: This function performs shuffle in-place. To get a shuffled copy
use call slice before calling, e.g. `array_shuffle(items.slice())`.
 