Extract parsing logic to another method for better error handling

## Problem
We've found that `Response` object is not differentiating between `ConnectionException`s and errors from minfraud lookup such as `IP_REQUIRED`.

## Solution
This PR separates initialization of Response object (where we actually send the HTTP request) and parsing of the body into two methods so we can still get the response code even if the connection errored out (i.e. timeout). After that we can call `parse` method to parse the body if the response is successful or raise relevant errors if something went wrong.

@disaacs @sunblaze for review.