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.
Ok, done and rebased. Uses uint128_t instead of unsigned int128_t. Left the other one (unsigned __int128) as is. GCC suggests using unsigned even though there probably is a __uint128