Built-in retry mechanism in GET requests in sdk using HttpUrlConnection

There are several steps here, which should be separate tickets so we don't make too many changes at once:
1. Put the retry logic into the async POST, PATCH and DELETE tasks as well as GET.
2. Provide retries for all the blocking calls.
3. Reimplement the async calls by calling the blocking code (I'll create a ticket for that since it's a cleanup task and not related to this issue).
4. Delete all the async tasks once they are non longer needed (ditto).