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
The first byte doesn't have the same properties, since Lucene writes `0x3FD76C17` a non-versioned translog can read an Operation.Type of 63 (which thankfully we don't have, we only go up to 4). I personally think -1 is safer but I don't think we'll get to 63 different translog operations any time soon, so the Lucene version should work as well :)

I'll make this change.