Additional hashtable implementations

I'm going to need a number of different hashtable implementations:

- [x] One that uses `void *`, `size_t` pairs as keys and compares them directly with `memcmp`. This will be used for the symbol table.
- [x] One that uses `void *` keys, but assumes a constant length, like the size of a struct. This one will be used for the ivar table within a class, other places where the key is a `seg_symbol`, and method lookup tables.
- [x] One that delegates key comparison to an arbitrary function pointer. This will be the general non-identity `Dictionary` type.

I'd rather not implement them using function pointers because most of these are going to be performance hotspots in the interpreter. This might involve excessive acts of macro cleverness or copy-and-paste.