re-implement the fifo with double word cmpxchg
The "classic" fifo implementation has the disadvantage that it is subject to the ABA race condition. For our usage this has probably never triggered, since this would need a very quick recycling of list elements, but nevertheless it is probably better to fix that problem once and for all. This new implementation uses a unique transaction ID that is stored with the list element pointer in a single atomic operation. On most modern architectures this double word atomic operation should result in a single cmpxchg if the code is compiled with the good compiler options. For gcc, usually -march=native should suffice.