Better rate fetch failure handling

If the rate fetch fails, retry 3 times. If it still fails after 3 retries, and we previously had a cached value for that rate, keep using the cached value. If all 3 retries fail and we have no previously cached rate, raise the HTTP error.