Handle non-JSON bodies

This is a bit of a hack so that we don't try to parse HTML or plaintext
as JSON when we get back, e.g. a 404. Ideally, we should be looking at
the content type of the header and parsing or not based on that, but
that's for another pull request, for sure.