Write translog opSize twice

Adds a new `greedyRead` method that will read the operation sizes, then
consume that many bytes in the stream, validating the checksum without
transforming the bytes into a `Translog.Operation`. If the bytes are not
corrupt they are read into an operation and returned.

This new `greedyRead` method is used when reading translogs from disk,
where they may have corrupted sizes that can cause OOMEs