switch from JSON to Yajl (for stream parsing)

turns out that a single HTTP chunk might not be big enough to contain
the entire JSON message, and then JSON will throw a parse error. Yajl
has parse mode, so I can just throw all the chunks at it and get a
callback each time there's an entire message.
rescue JSON parsing errors and retry, just in case