Simplify the no-atomics and iOS/OS X fallbacks in atomic.{c,h}.

Now the header has two paths in the GCC atomics case: The one
where 64-bit atomics work, which does the obvious thing and uses
the intrinsics, and the one where they don't which relies on an
emulated or hand-implemented 64-bit cmpxchg that all other 64-bit
operations are then implemented in terms of. This ensures that
we use the somewhat faster intrinsics on platforms with sane
compilers. InterlockedExchange64 () is still implemented in terms
of a 64-bit cmpxchg in both paths, though, since GCC has no
intrinsic for it.

Further, things have been simplified such that only one define
needs to be set in the header if 64-bit atomics are broken, which
is BROKEN_64BIT_ATOMICS. It only has meaning in the GCC atomics
case, and means that 64-bit cmpxchg is implemented in atomic.c.
No define needs to be set to indicate that 64-bit atomics actually
work; this is the default assumption.

Finally, since the lock-based 64-bit cmpxchg fallback is needed
both with broken compilers and on systems with no atomics at all,
it has been factored into a section guarded by NEED_64BIT_CMPXCHG.
Use __sync_sub_and_fetch () for atomic decrements for clarity.
Use HAVE_ARMV7 in preprocessor check instead of explicitly listing archs.
Fix preprocessor architecture checks in atomic.c.

We want to check the host architecture, not the target architecture.
Move 64-bit cmpxchg assembly for ARM into a separate function.