Reimplement Atomic::cmpxchg as a template. One goal is to generalize the API and make it more type-safe, eliminating the need for most casts. This includes replacing the type-information-losing cmpxchg_ptr with type-safe cmpxchg. Another goal is to allow more direct platform-specific implementation of the generic operation, for platforms that support that via generic intrinsics.
JDK-8184334, addressing only Atomic::cmpxchg.