Optimize strtr w/ 2nd arg array

Fixes bug #63893: poor efficiency of strtr() using array with keys of
very different length.

The implementation is basically all new, which carries some risk with
it.

The algorithm is described in "A Fast Algorithm For Multi-Pattern
Searching" (1994) by Sun Wu and Udi Manber.
Refactoring, bugs & leaks
strtr() with 2nd param array - optimization

About a 1.25x speedup in my test script by writing the result string
only when a match is found and at the end instead of on each iteration.
Remove unused block
The compiler can figure this out
Remove _GNU_SOURCE, add local heap sort
NEWS for bug #63893
Merge branch 'PHP-5.4' into PHP-5.5

Conflicts:
	NEWS
Add zend_qsort_r & use it in strtr
UPGRADING.INTERNALS: document zend_qsort_r
Fix compile failure introduced by the fix for bug #46408.
Merge branch 'PHP-5.5'
Update fputcsv() to escape all characters equally.

At present, backslashes have special case handling within fputcsv(): when one
is encountered within a field that's being escaped, escaping stops until the
next instance of the enclosure character is hit.  This can result in malformed
CSV.

Fixes bug #43225 (fputcsv incorrectly handles cells ending in \ followed by ").
Merge branch 'PHP-5.3' into PHP-5.4

* PHP-5.3:
  Update fputcsv() to escape all characters equally.
Merge branch 'PHP-5.4' into PHP-5.5

* PHP-5.4:
  Update fputcsv() to escape all characters equally.
Merge branch 'PHP-5.5'

* PHP-5.5:
  Update fputcsv() to escape all characters equally.
Fixed bug #57702 (Multi-row BLOB fetches)
Merge branch 'PHP-5.4' of git.php.net:php-src into PHP-5.4
Merge branch 'PHP-5.4' into PHP-5.5
Merge branch 'PHP-5.5'