Remove unnecessary check

In case of an update the key already existed, so the next free
element can not change.
Add helper function for updating bucket contents
Make zend_hash_apply_deleter() void, to allow reuse

Also remove lies in the comment above the function. apply_deleter
is not safe against modification, if the modification involves
removing the next bucket.

Also modified the implementation of zend_hash_graceful_destroy()
to be fully graceful (the reverse variant already was).
Rename+move zend_hash_apply_deleter and reuse it

The interruption handling was normalized to wrap the entire deletion
operation (instead of leaving out the destructor call and/or the
deallocation) per the recommendation of somebody (don't remember who)
familiar with zend signals.

There is an always-inlined variant of the function for use in
the main deletion function, to ensure there is no performance
impact.