(PUP-3379) Don't mutate caller's arguments

Previously, the caller supplied a hash of parameters, and the
retry_action method would decrement the `retries` value.

This commit modifies it so that the caller's parameters are not mutated.
(PUP-3379) Don't retry if block raises fatal error

Previously, if the caller didn't specify which exceptions to retry, the
retry_action method would retry all exceptions, even SystemExit and
NoMemoryError, which should never be rescued.

This method modifies the retry_action method to always re-raise
SystemExit and NoMemoryError, even in the situation where the caller
asks for them to be retried.