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.
It is painful. GCC assembly won't take "a" as a target for a 128-bit type. You have to explicitly lead eax and edx to get the pseudo-128-bit register. The same goes for ebx and ecx.

As a note to George. To convert this to fetching the result line should be changed to:
"=a" (((int64_t *)&prev)[0]), "=d" (((int64_t *)&prev)[1])

I verified this produces the correct assembly.