Add support for 128-bit compare and swap on x86_64 when available.

A 128-bit compare-and-swap will enable a better atomic lifo implementation
that uses the pointer + counter method to avoid ABA issues. This commit
adds configury to check for the instruction (cmpxchg16b) and adds an
implementation that uses the __int128 type available in C99.
If I'm not mistaken you have to add "-mcx16" to the CFLAGS to get this working on GCC (and maybe ICC). clang seems to do just fine without.