hashmap: free both key and value if specified in construction

Hashmap's can automatically free both the key and the value for their
items, the behaviour being controlled in the construction of a new
hashmap (buxton_hashmap_new())

This commit enables automatic freeing of the key and value when
buxton_hashmap_del is caused, ensuring any associated memory
is automatically freed.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
hashmap: Support strings by default

String storage requires different mechanisms than simple integer
storage, so the hashmap must behave differently when dealing with
strings and simple pointer comparisons.

This makes the default behaviour string-based, meaning integer
based keys should use the puti, geti, deli methods. These should
be the main key types that need to be supported within the context
of buxton.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Switch notify_mapping to BuxtonHashmap

This commit uses BuxtonHashmap for the client notification list, reducing
the dependency on the external hashmap import.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>
Convert client_list_item to BuxtonHashmap

BuxtonHashmap enables us to lookup any client rapidly just by using
the active file descriptor. We also gain automatic memory management
for the clients, ensuring their associated data is cleaned whenever
a client is removed (terminate) or when we exit.

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>