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.
From C99:

A preprocessing directive of the form
# pragma pp-tokens_opt new-line
where the preprocessing token STDC does not immediately follow pragma in the
directive (prior to any macro replacement)152) causes the implementation to behave in an
implementation-defined manner. The behavior might cause translation to fail or cause the
translator or the resulting program to behave in a non-conforming manner. Any such
pragma that is not recognized by the implementation is ignored.

So, other compilers are required to ignore pragmas they do not recognize.