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]`.
How does an `EndOfFile` if `self.len()` is `0`, and `ShortWrite` if it was able to partially right the file sound?