Fixes to StreamExts.

Separated out from #5503.

- Makes ReadBytes method actually work if Read returns a count less than requested.
- Avoid an unnecessary array allocation in Peek and ReadUInt8.