Better support for partial buffer reads/writes in translog infrastructure

Some IO api can return after writing & reading only a part of the requested data. On these rare occasions, we should call the methods again to read/write the rest of the data. This has cause rare translog corruption while writing  huge documents on Windows.

Closes #6441

PS. I'll add java docs to the new Channels util class, but wanted to start the review process.
can we catch Throwable here since we add relevant info to wrap the exception? Also, can it be an IndexShard based exception, so we also capture the index and shard id?