Fix ByteString.read for cases when initial read is incomplete

The current implementation of ByteString.read assumes that it can read
the entire buffer in one shot, which is a faulty assumption. I've added
a test case that demonstrates this. Before the fix to ByteString.read
the test fails.

Note also that pre-patch the code could block some types of producers
forever since only a portion of the stream may be read. You can observe
this by making the byte array > 2 * pipeBufSize in
TestByteString.testRead.

I observed the following failures when running all tests:

:data-avro:test

Gradle test > com.linkedin.data.avro.generator.TestAvroSchemaGenerator.testFileNameAsArgs FAILED
    java.lang.AbstractMethodError at TestAvroSchemaGenerator.java:103

Gradle test > com.linkedin.data.avro.generator.TestAvroSchemaGenerator.testFullNameAsArgsWithJarInPath FAILED
    java.lang.AbstractMethodError at TestAvroSchemaGenerator.java:103

Gradle test > com.linkedin.data.avro.generator.TestAvroSchemaGenerator.testReferrerBeforeReferreeInArgs FAILED
    java.lang.AbstractMethodError at TestAvroSchemaGenerator.java:195

However, these tests also fail for me before any of the changes in this commit.

RB=204125