Better HTTP error messages

Instead of just failing to parse JSON on a bad HTTP response, we say we
got a bad HTTP response.

cbugg: bug-786