zhash: Add support for custom hash function and arbitrary key type

Make it possible to use arbitrary data for key and value in a zhash.

* Changes zhash_set_destructor to zhash_set_item_destructor and zhash_set_duplicator to zhash_set_item_duplicator.
* Adds zhash_set_hasher, zhash_set_key_destructor, zhash_set_key_duplicator, zhash_set_key_comparator, zlist_set_destructor and zlist_set_duplicator.
* Changes data type for keys from const char * to void * (ABI compatible but API break).