Add shl_dlist linked list implementation

dlist is a double-linked list implementation. It's circular, untyped and
uses offsetof() to get access to the parent objects.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>