Topic/random take3 merge

This PR allows us to merge the *topic/random-take3* branch, which makes some major refactors to `spire.random`.

Ideally we can get this merged quickly to avoid blocking more RNG work. But I think the changes here are useful and important. As long as the overall strategy seems sound, I'd prefer to do the merge and then create future PRs to address individual small changes.

Review by @tixxit, @dusank.