hbmap: make compatible with clang and others
hbmap: make compatible with clang and others

turned out that a feature i used was a GNU extension that's not
supported by clang or standards-conformant compilers
(VLA inside struct).
if we'd rely on GNU extensions, we could just as well use typeof
and expression statements, which would really make the code a lot
less ugly, but alas we can't.

one slightly annoying consequence of the required changes is that
we need to cast the function pointer of the comparefunc to (void*),
which removes type safety, i.e. you could now pass a function
pointer with a bogus prototype, and no warning would be emitted.

rofl0r/libulz