Remove some usages of hashtable internals
Add zend_hash_reindex

The implementation differs from the original in array.c in that it
rehashes the hashtable in the same loop. This is approximately two
times faster (not counting the rare case of a purely associative
array).
Add zend_hash_splice

This implements the original functionality of php_splice, but
as an in-place operation, thus avoiding copying the HT.

This is much faster (~10x) if the splice removes a small portion
of the array and doesn't insert many elements.
Don't always separate splice replacement array

Only perform separation when a typecast is done. Avoids doing a
full hash copy in many cases.
Add only_integer_keys option to zend_hash_reindex

This allows to either do a full reindex, or only reindex the integer
keys.