Read files on-demand, rather than streaming greedily into memory.

The problem with streaming the DBF and SHP files independently is that each greedily consumes as much memory as possible, and then we have to do a bunch of work to piece the records from both streams back together again. It’s much simpler to just have a read-on-demand API where we can read the next record from each file on demand, and thus keep only a single record in memory at a time.