Add support for sampling and shuffling.

Using the Shuffling and Sampling objects from Spire, we now support
the following:

  arr.qshuffle()  // in-place array shuffle
  ns.qshuffled    // returns new shuffled collection
  ns.qchoose      // choose a random element from any Iterable
  ns.qsampled(10) // returns 10 random elements in an array

You will need an implicit spire.random.Generator instance in scope
to use these methods (possibly we should put spire.random.GlobalRng
in the default global scope).