~This PR does two things~
- use a Span<unsigned char> for GetRandBytes and GetStrongRandBytes
~2. make GetRand a template for which any integral type can be used, where the default behavior is to return a random integral up to the max of the integral unless a max is provided.
This simplifies a lot of code from GetRand(std::numeric_limits<uint64_t>::max() -> GetRand<uint64_t>()~
MarcoFalke this was inspired by your comment here: #24185 (comment) about using Span, so hopefully I'll be able to get this PR done and merged 😂
~Also, if requested I could revert the GetRand(std::numeric_limits<uint64_t>::max() -> GetRand<uint64_t>() related changes if it ends up causing too many conflicts~