1. The version detection will fail miserably with an NPE if the request "GET /" happens not to return the version (for instance, if the request failed because of missing authentication), and we won't have any details about what happened
2. When we fail to parse the response to JSON, we don't include the response in the resulting exceptions; not even the status code
3. When the generateResult() method fails in a SimpleElasticsearchWork, we don't wrap the exception to add more context (such as the request and response). This makes it difficult to interpret the exception.