immutable deque double ended queue (aka Dequeue or Deque) based on cons list and snoc list. The implementation of this deque refers to the Hasekll implementation deque