Queue implementation

This is a simple FIFO implementation using reference counting and
copy on write.

It implements the basic queue operations:
- Head: Return a pointer to the first element without dequeuing it.
- Enqueue: Adds one element to the end of the queue.
- Dequeue: Dequeues the first element of the queue and returns a
pointer to it.

In addition, it implements the basic administrative functions:
- New
- Destroy
- Copy