The way p.Error works has changed. Callers no longer need to keep track of the
start position. Simply calling p.Error with the message will generate a
meaningful dump from Data.

Furthermore, there's no need to commit read newlines. Lines are updated as
they are seen, and p.Error will figure out the correct line number of an error
even if we've read past it.