Add support for custom reasons to curl_httpclient

Attempts to parse the actual reason string returned by the server when making an HTTPRequest with curl_httpclient, rather than always using a generic one. There's probably won't cover all possible cases, but then it'll just fall back to the same behavior it uses now.

I also changed the HTTPError exception so that it uses the the actual reason from the HTTPResponse that failed in its exception message (if one is available), rather than always using the generic reason based on the HTTP status code.