Add Reader impl for &[u8] and Writer impl for &mut [u8]

This continues the work @thestinger started in #18885 (which hasn't landed yet, so wait for that to land before landing this one). Instead of adding more methods to `BufReader`, this just allows a `&[u8]` to be used directly as a `Reader`. It also adds an impl of `Writer` for `&mut [u8]`.
It appears to me that this actually serves a different purpose, since sequential writes will write to different areas in the slice rather than overwriting the same beginning bit over and over.