Use a custom hash table implementation to reduce GC pause times

This is a simple implementation of a linearly probed, open-addressed
hash table. It uses a very large slice + indexes, eschewing pointers
(and the keys/values are also pointer-free), so that the GC duration is
very short.

Fixes #5