Add a test for pipelined requests.
Separate parser bounds checks from mode checks.

Whether collectingContent is -1 determines if the parser mode: if it is
collecting headers or body data.

The secondary check in each if-statement looked for the data boundary.
This commit separates these checks, because they will become our loop
terminators.

Additionally, this prevents buffer indexing for the header terminator
when we're not parsing headers.

This commit in itself fails tests, because headers and body often arrive
in a single write, and the parser stalls.
Don't `return` from parser when there's no body.

This interferes with the loop we're building. Instead, change the
if-statement to an if-else to accomplish the same here.
Parse in a loop until the buffer is exhausted.

This wraps the parser logic in a `while(true)`. The callback at the end
of the function is removed, because it is never reached. The function
always exits by one of the loop terminators.