faster StringTable

- use a hash table with open addressing and linear probing
  for better cache locality
reserve enough initial capacity to avoid hash table resizes

- based on numbers from phobos compilation
use quadratic probing with triangular numbers

- guaranteed to visit every bucket in a power of 2 sized hash table

- mitigates clustering problem (with many hash collisions) while still preserving
  good cache locality
use FNV-1a hash

- much better distribution leads to less collisions
  and thus to faster lookup

- also simpler (inlineable) and still very fast