Performance improvement and benchmark

n/t

cc @bnoordhuis
I believe this will parse e.g. `"Foo: bar\nBar: baz\r\n"` incorrectly.  You should probably scan forward one character at a time until you find CR _or_ LF.