Refactors timeouts and retries

Instead of implementing our own timeout and retry mechanism, we rely
on Faraday for that.

We just pass `connection_timeout` and `read_timeout`, as well as `retries`
to Faraday.