dkhash: memory leak and possible loss of objects in dkhash_remove

Pointer to previous in dkhash_remove was only set for first element
in a given bucket. So when finding for example third object for
removal, setting prev->next=obj->next looses the reference to the
old prev->next, which is the second object in the list.

This can be tested by creating a hash map of one bucket (practically
a linked list), and fill and remove all, both forward and backward.
Such tests are also added with this patch.

Signed-off-by: Max Sikström <msikstrom@op5.com>
Signed-off-by: Andreas Ericsson <ae@op5.se>
Add Max Sikström to THANKS-file

298 people on it now. Pretty damn impressive, tbh :)

Signed-off-by: Andreas Ericsson <ae@op5.se>