Added better HTTP error handling.

A HttpRequestException is not enough when your REST API returns error
content that your REST Client should use. E.g. a 400 Bad Request may
contain valuable information as to what went wrong. I changed the
ExecuteAsync to throw an HttpResponseException if not successful,
containing the response message. I also added 2 extension methods for
reading the content synchronously. See the test for an example.