Switch to a more robust algorithm for hash combining

The current algorithm for hash combining behaves very poorly when hashing
multiple short streams of small integers like (0,1,1,0,x) that only differ
by a single large number x. These objects appear frequently in PDELab's ordering
framework, and the resulting bad hash distribution really hurts the performance
of the unordered containers in PDELab.

This patch switches to an algorithm that is inspired by CityHash (see the source
code comment) and has proven to be much more robust in testing.
Add missing .cmake file names to cmake/modules/CMakeLists.txt.