Fix realloc bug when the siblings list is only one item long.

When doing something like
```C
p = h_malloc(1024);
p2 = h_realloc(p, 2048);
```

and the system realloc returns a new region instead of an expansion of the old one then the update in `hlist_relink()` scribbles over freed memory.

This happens because `i->prev` is initialized to `&i->next` and thus when realloc copies the content of the memory we get a pointer to inside the block that was just freed in `i->prev`.  This only happens when the block is the only member of its siblings group as far as I can tell.

Here is an attempt at fixing the bug.