Add equivalent to `Shuffle` function from `math/rand` and `math/rand/v2`
packages, but based on randomness from `crypto/rand` package. This
allows cryptographically secure shuffling of data.
Also add `ShuffleSlice` function that shuffles a slice of any type.
BREAKING CHANGE: Minimum required Go version is now 1.18 due the `ShuffleSlice` using generics.
Upgrade to Go 1.17 and golangci-lint to 1.64, and fix the linting issues
that were found.
Also upgrade CI workflow actions to latest versions, and setup a test
matrix for relevant Go versions.
BREAKING CHANGE: Minimum Go version changed from 1.15 to 1.17.