Cap on unsuccessful attempts before onGiveUp fires.
The first synchronous call counts as attempt #1 - 5 permits
four scheduled retries after the initial.
Schedules the next attempt (rAF / afterNextRender /
setTimeout / queueMicrotask). Returns a cancellation
closure - return a noop when the scheduler doesn't expose one.