switched to faraday

Discussion PR
I've been working on this as well. I think it's not required to instantiate this every request. Your builder code is more correct than mine but structurally we could do something like.

```
def conn
      @conn ||= Faraday.new(url: URL) do |builder|
        builder.request :retry
        builder.request :url_encoded
        builder.request :basic_auth, @api_key, ''
        builder.response :logger
        builder.adapter Faraday.default_adapter
      end
    end

    # @param [:get, :post, :put, :delete] method
    # @param [String] path
    # @param [Hash] query
    # @return [RequestClient::Response] server response
    def request(method, path, query = {})
      raise ArgumentError.new("Wrong method #{method.inspect}. :get, :post, :put, :delete are allowed") unless REQUESTS.include?(method)
      conn.run_request(method, path.to_s, query) #, {accept: :json, content_type: :json}
    end
```

Because most of the connection details are always the same.