Faster hashing

1000000 Hashes
```
SM Timing
-----------
SizeT hash 	      1	00.061367	(00.061367 +- 00.000000)	[00.061367,00.061367]
String hash	      1	01.651815	(01.651815 +- 00.000000)	[01.651815,01.651815]
```
If that looks too much like a trick, just use a dummy template parameter with default value and then only partially specialize for the true case. For example:
```c++
template<bool Is64BitArch, typename = void>
struct HashPrimeAndBase {
  static constexpr std::size_t kPrime = 16777619u;
  static constexpr std::size_t kOffsetBasis = 2166136261u;
};
template<typename dummy>
struct HashPrimeAndBase<true, dummy> {
  static constexpr std::size_t kPrime = 1099511628211u;
  static constexpr std::size_t kOffsetBasis = 14695981039346656037u;
};
```

That helps because the specialization is then still a template and gets only instantiated on demand while a full specialization as you have it now is no template anymore and gets instantiated in any case.