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.
Define opal_int128_t type if a 128-bit integer is available.

There currently is no standard support for 128-bit integer types. Any use
of the __int128 and int128_t types can lead to warnings from the compiler
when using -Wpedantic. Additionally, some compilers may support __int128
and other may support int128_t. This commit addresses both issues by
defining opal_int128_t if there is a supported 128-bit type. In the
case of GCC a pragma has been added to suppress warnings about __int128
not being a standard C type.
Fix return type of opal_atomic_cmpset_128.

The return type will be opal_int128_t after the fetching atomics
changes but for now it is int.
Add support for __sync builtin compare and swap on 128-bit values
Add check for -mcx16 flag for 128-bit compare and swap

Some versions of gcc require this flag to be set before the __sync
builtin atomic compare and swap will support 128-bit values. If the
flag is required this check adds the flag to the CFLAGS.
Merge pull request #297 from hjelmn/topic/cmpset128

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