CLEANUP: atomic: add a fetch-and-xxx variant for common operations

The fetch_and_xxx variant is often missing for add/sub/and/or. In fact
it was only provided for ADD under the name XADD which corresponds to
the x86 instruction name. But for destructive operations like AND and
OR it's missing even more as it's not possible to know the value before
modifying it.

This patch explicitly adds HA_ATOMIC_FETCH_{OR,AND,ADD,SUB} which
cover these standard operations, and renames XADD to FETCH_ADD (there
were only 6 call places).

In the future, backport of fixes involving such operations could simply
remap FETCH_ADD(x) to XADD(x), FETCH_SUB(x) to XADD(-x), and for the
OR/AND if needed, these could possibly be done using BTS/BTR.

It's worth noting that xchg could have been renamed to fetch_and_store()
but xchg already has well understood semantics and it wasn't needed to
go further.
diff --git a/src/proxy.c b/src/proxy.c
index 1b2cd2e..80eba92 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -2220,7 +2220,7 @@
 	int len1, len2;
 	unsigned int ev_id;
 
-	ev_id = HA_ATOMIC_XADD(&error_snapshot_id, 1);
+	ev_id = HA_ATOMIC_FETCH_ADD(&error_snapshot_id, 1);
 
 	buf_len = b_data(buf) - buf_out;