Lock-free queue implementation.

Multiple producer, multiple consumer based implementation.
Uses a forward (singly) linked list to keep track of elements,
inserts in the back by keeping track of the rear of the queue.

The special case of handling empty queue is avoided by making the
queue head the first (unpoppable) element of the queue, thereby
making all operations either insert-between or remove-between style
calls.