Fix bug parsing incomplete packets over TCP
This was a real doozy. The initially observed problem was that, when going over
TCP, incomplete packets would _sometimes_ fail with a different parse error
than the expected one. They would still fail to parse (and rightly so, as the
packets were missing data) but dog would display the wrong message. This
behaviour was inconsistent, would only occur over TCP, especially when talking
to localhost.
The root cause was that when the DNS length was in one packet but the response
was in one or more other packets, any extra zeroes in the internal buffer would
be correctly removed from it before parsing takes place, but in any other cases
(entire length + entire response in one packet, or second byte of length +
entire response in one packet), the buffer was _not_ being truncated, and the
parser would attempt to parse a packet that had a load of extra zeroes at the
end of it. Normally this wouldn't be a problem, because the DNS wire structure
would be correct and complete, but if parts of it are missing, the parser would
continue parsing past the end of the response, parse some zeroes, still fail,
but fail for a different reason, printing the different error message.
A `buf.truncate(read_len - 2);` call would be enough to fix this, but I thought
it better to make the two branches create Vecs in the same way.