Implement `shuffle()`
This MR implements the shuffle()
function, which works the same way as in Armadillo.
Here I have used the bijection-based approach of this paper: https://arxiv.org/pdf/2106.06161.pdf
Lots of tests are included. I'll let this sit for a couple days, review it with fresh eyes, then merge it.