Don't seek forward if read is within the same read block
Try harder to avoid seeks in streaming downloads
Read past end of file should return zero bytes, not raise an error