cpan/JSON-PP: Fix tests that fail due to hash traversal randomization

One cannot assume two hashes with the same keys will have the
the same key order. And after hash traversal randomization one
can assume they WONT.

Waiting on new release of upstream
Various changes to cpan/ExtUtils-MakeMaker

Fix code which modifies a hash while each()ing over it

It has never been correct to modify a hash during traversal by each().

In older perls this was unlikely to break the tests. In newer perls
it is relatively likely, and in 5.18 it will be almost certain.

Do not hard code the list of perl header files - discover them from disk instead

Don't need completely different include file collector on VMS.

We just need to skipping putting a Unix delimiter between the
directory and the filename.

Includes a version bump to all the EU::MM files (to prevent any possible
$VERSION consistency checks from failing like they would on *nix)

This patch has been submitted to the EU::MM project in a modified form
and once merged there should replace these changes.
add a "hash quality score" to Hash::Util::bucket_stats()
Split out hash functions into new file and turn into inline static functions

This includes various tweaks related to building SipHash and other
cleanup.
add a hardened one-at-a-time hash variant

Mix in additional randomness into the final value.
silence signed mistmatch in comparison warning in Murmurhash

as far as I can tell 'i' can only be positive here.
default to PERL_FUNC_ONE_AT_A_TIME_HARD for all builds

For testing, but maybe for ever
Enable hash traversal order randomization

This patch causes Perl to use a random order per hash when traversing hashes
via keys(), values() and each().

The random order is determined by add a new property xhv_rand to struct
xpvhv. This property is calculated on per traverse of the hash by using a
pointer/integer hash function on the address of the bucket array, and then
XORing it with the bucket index counter during traverse. This causes each
hash to have a different order for traversing the buckets.

The purpose of this change is to make hash seed discovery attacks harder.
An attacker loses a lot of information when the keys are "randomized".

The ptr_hash() sub is borrowed, with changes, from autobox, which is released
under the same terms as Perl.
randomize bucket split insertion in hsplit()

We use the HvRAND data as a set of flags that we rotate
over as we move items into the high buckets. If the flag is
set we insert one after the top, if the flag is not set we
insert into the top like we used to. This means the order
will be perturbed somewhat.
semi-Randomize hash insertion order

Use HvRAND(hv) as a set of flag bits. Each time we use a bit we
rotate the value of HvRAND(hv) so the next time we use a different
bit. This also means that inserting into a hash has a high chance
of changing the perceived iteration order of the hash.
make sure we set HvRAND whenever we set HvARRAY

Defines HvARRAY_set(hv, array) which sets both properly.
Only realloc in hv_auxinit if we arent SvOOK already.

Once we set SvOOK we should not need to realloc again.