Fix BinaryReader / stream inconsistencies.

BinaryReader internally buffers bytes, meaning that the underlying stream position may not reflect the assumed position.

This adds extension methods for directly reading basic types from a Stream, and removes BinaryReader from the format parsers that incorrectly used BinaryReader.BaseStream.


The R8Reader changes will need to be tested by someone with access to the appropriate assets before merging.