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 reason I made the header `0xffff_ffff_0000_0001` was so I could ensure that no existing translog would ever start with this, since for non-checksummed translogs the very first `.readByte()` should never be negative (or else the translog is corrupted and will throw `ElasticsearchIllegalArgumentException("No type mapped for [" + id + "]");`). So I know that the old translog will never have this HEADER long as the first long long value.

The prefix `0xffff_ffff` is intended to be a marker meaning "this is a versioned translog stream" and the suffix `_0000_0001` is the version number. The next translog version would have the header `0xffff_ffff_0000_0002`.

As for enabling this only for new indices, I'm not sure what that would give us? We already create new translog all the time (deleting the old ones) for an existing index.