Fix memory leak in non-intrusive ll_queue.
WIP: ll_list code (currently working on base case).
Implement basic ll_list successor lookup.
Fix indentation.
Implement simple element predecessor lookup.
Unlink operation.
Compile fixes for ll_list::unlink.
Handle delayed unlink in release function.

When a ll_list element becomes unlinked, the element is only marked
and the surrounding elements are updated to skip the element from
now on.  However since the element may still be in use, the pred/succ
pointers of the elements cannot be immediately cleared.

Instead of spinning in the unlink function, the zeroing is delayed
until the reference count of the element drops to zero (in which case
no-one is using that element and it is clearly not pointing at itself).
At this stage, the final operation in unlink is performed: relinking
the predecessor and successor pointers to the deleted element.

The only time this algorithm needs to spin, is:
- an element is inserted (after having been unlinked) while it is still
  in use,
- an element is destroyed while still in use.
Add comment about release recursion.
Export simple_elem_acqrel::release.
Add ll_list_hook, ll_list types; move some code around.
Change link result to enum indicating failure mode.
Search around for correct semantics in base impl.

The base implementation needs to drive the user-visible implementations,
so it is not immediately obvious how the details should be implemented.