New hmap and hmapx hash table implementations.
These new hash table implementations should yield better performance
than the older one, for at least two reasons. First, they are based
on "separate chaining" rather than "open addressing", and thus do not
suffer from clustering, which is likely to be an issue with the hash
functions that we have been using. Second, they are carefully written
to generate simple code that should inline well.
Also, move the existing hash functions into a new pair of files,
src/lib/hash-functions.[ch]. This allows users of the new hash tables
to use them without including the older hash table header.
12 files changed: