Add translog checksums

Switches TranslogStreams to check a header in the file to determine the
translog format, delegating to the version-specific stream.

Version 1 of the translog format writes a `0xffff_ffff_0000_0001` header
at the beginning of the file and appends a checksum for each translog
operation written.

Also refactors much of the translog operations, such as merging
.hasNext() and .next() in FsChannelSnapshot

Relates to #6554
in this case is it worth peaking at the file again and check if the first byte is valid even for version 0? maybe we should do that check first and then move to V1 and fail hard if we see a CorruptIndexExp