implementation should use function declaration macros as well
initialize after everything has been allocated
put_with_hash_no_resize did not check if it found an empty entry. fixed