manage messages split into multiple chunks

buffer content until we find at least one newline character.
Technically this doesn't handle multiple messages ending in an
incomplete one; as proof of concept it'll do.
helpful `squeeze-parse-count' function

use it in `squeeze-parse-players-line'
whitespace
include underscore as a valid character in plist keys
slightly better `squeeze-update-state'

use a temporary buffer rather than multiple calls to `concat'
much better `squeeze-unhex-and-decode-utf8-string'

It turns out that `url-unhex-string' uses the multiple-concat strategy
that I just removed from `squeeze-update-state', which ends up scaling
quadratically in the size of the input.  This is bad, particularly
when we are working (as I am) with large output string such as
resulting from an albums query.