Version Check - Exponential backoff for retries

What / Why

Follow up for MR: !104302 (merged)
Follow up for thread: !104302 (comment 1185407130)

With the above linked change we have added logic to the Version Check Reactive Cache to manage its own error state by caching the error rather than null. When an error is read it will trigger a Sidekiq job to re-hydrate the cache. This is great for GitLab instances that get an unexpected error when checking their version status.

The issue: For instances that are "air-gapped" and can't make external API requests this call will always fail, meaning there will always be a error state in the cache and the Sidekiq jobs will be repeatedly rescheduled to try and properly fetch the version data.

Proposal

We should implement backoff logic that will detect the repeated failure of the calls. This will protect instances that will never get a successful response from wasting resources continually trying to fetch the data.

cc/ @tkuah @twk3 @jayo