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.
Is there such a thing as uint128_t (vs. "unsigned int128_t")?

Does that fact that int128_t guarantee to mean that "unsigned int128_t" (or "uint128_t") exists, or do you need additional configure tests for these unsigned types?