refactor(turborepo): API Client Cleanup (#5084)
### Description
I had this inside the HTTP cache PR, but it makes sense as a separate
PR.
Refactors the API client in the following ways:
- Changes the retry logic to use try_clone from reqwest instead of the
awkward (and unnecessarily general) `retry_future` function that relied
on a closure that generates a Rust future.
- Use a crate Error type with thiserror instead of anyhow. This is
pretty standard.
- Factor out some common logic into helper functions
### Testing Instructions
Existing tests should suffice.
Co-authored-by: --global <Nicholas Yang>