Return an error on Read again.

With the previous API was too hard to reason about errors, especially
for conditions like EOF, which we will want to handle better.
Use the same behavior for Read as io.ReadFull with respect to EOF handling.
Add Reader.ReadFields.