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 looked at this again and made sure we decrease the counter if we run into trouble in the FsChannelSnapshot constructor. Imho takeing the increaseRefCount out of lock will make the code uglier as I would need to deal with whatever exceptions the lock can throw at me.