Raw import of Marek Majkowski's cisphash.c

siphash is a hash function designed for producing hard-to-predict
64-bit outputs from short inputs and a 128-bit key.  It's chosen for
security and speed.

See https://131002.net/siphash/ for more information on siphash.

Source: https://github.com/majek/csiphash/
Get csiphash better integrated with our build system
csiphash: avoid unaligned access on non-x86
Tests for siphash, from reference implementation.
csiphash: Add functions to take a global key.
Siphash-2-4 is now our hash in nearly all cases.

I've made an exception for cases where I'm sure that users can't
influence the inputs.  This is likely to cause a slowdown somewhere,
but it's safer to siphash everything and *then* look for cases to
optimize.

This patch doesn't actually get us any _benefit_ from siphash yet,
since we don't really randomize the key at any point.
Split crypto_global_init() into pre/post config

It's increasingly apparent that we want to make sure we initialize our
PRNG nice and early, or else OpenSSL will do it for us.  (OpenSSL
doesn't do _too_ bad a job, but it's nice to do it ourselves.)

We'll also need this for making sure we initialize the siphash key
before we do any hashes.
Randomize the global siphash key at startup

This completes our conversion to using siphash for our hash functions.
Changes file for feature4900
Remove string hash in ht.h so we can't accidentally use it
Merge branch 'bug4900_siphash_v2'