Remember where the header ends, and use it directly for reads from beginning.

This is an optimization (lets us skip the index traversal, with
associated seeks, when reading from the beginning), and also fixes a
bug where .validate() would miss if there was random junk in between
the end of the header and the beginning of the first block, because it
always went via the index. Now it just read straight through the whole
file.