Support long lines, simplify API

I thought reader.ReadBytes() would not read lines longer than the
readers buffer size, but it turns out that it buffers infinitely, which
is what we want here (the algorithm used for parsing starts at the end
of the text, so we need to buffer up everything anyway).