Removed Action.FAILED, since it was never used and cluttered the
implementation. Subclasses should just either throw an exception or
directly call failed(Throwable).
Improved changes introduced by a746d78.
Removed unnecessary volatile declaration.
Calls to reset() are always followed by iterate() that provides a memory barrier by changing its state, which is an AtomicReference.
Cannot throw exceptions from reset(), must fail the callback instead.
Removed unnecessary reset of fields from onCompleteSuccess() and
onCompleteFailure().
They are not needed because these are methods that move the
IteratingCallback in a final state, so it won't be used anymore. And
if it is reset(), then those fields are already properly reset there.