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]`.
They both accomplish the same thing, just through different approaches. The `&mut [u8]` by way of modifying the slice, the `BufWriter` by saving it's position in the slice. The former may be a tad faster, the latter allows it to support seeking. So I guess we shouldn't deprecate it.