more methods working with a non-global RNG

This is branched off of my other PR #8331 and continues it: the new commit here makes almost all `rand` methods work with a passed RNG. The main exception is `rand(r::Range, ...)` as I already touched this part of the code in #8309, so I prefer to wait before implementing it.
Also the value of `(srand(0); rand(Uint64))` changes here, to make the function more natural and similar to `rand(Uint128)`. I can revert this if considered a (worthless) breaking change.