Wrap our PRNG interface(s) in Rust with appropriate traits

Similar to legacy/trac#24659 (moved), we should provide a way to wrap our C code for getting randomness in Rust, while implementing the appropriate traits (from rand) so that we're able to switch in Rust implementations if we want later.

This is also blocking legacy/trac#23886 (moved).