Fix array_multisort to allow for first arg that can't be taken by reference

Summary: array_multisort accepts any non-zero number of arguments, and for all of
its varargs (everything except the first arg) it tries to take each
vararg by reference but allows varargs that can't be taken by reference
(for example, an array literal). However, HHVM's implementation of
array_multisort erroneously fatals (if called directly) or warns (if called
via call_user_func_array()) if its first arg cannot be taken by reference,
which differs from PHP5.

This diff fixes HHVM's implementation of array_multisort to allow its first
arg to be something that can't be taken by reference without raising any
warnings. It also fixes the "call_user_func_array('array_multisort', $args)"
use case so that it does not raise a warning if the first element in $args
is not a reference.

Closes #1486

Reviewed By: @ptarjan

Differential Revision: D1412141
Disable copy-on-write by making all array functions always copy

Currently has issues
Remove more instances of hasMultipleRefs
Remove usages of hasExactlyOneRef

Currently untested
Fix failing array_plus_eq test
Fix curl_copy_handle tests.

I'm not really sure how they were passing in the first place, and
what I did to make them fail.
Allow arrays to not be copied when adding a new key.

Fixes failing serialisation tests
Fix invalid array copy sometimes breaking array_multisort