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.
I think InterruptedException is maybe not needed, because its checked and not in the signatures anywhere. But Exception is much better than Throwable. Thanks!

The main issue was: It hides OutOfMemoryError and this confuses users and makes reporting tools for JVM problems useless.