The macros CONCAT(), MIN(), and MAX() are defined over and over again in
RIOT's code base. This de-duplicates the code by moving the macros to a
common place.
Update the `atomic_fetch_<OPERATION>_u<WIDTH>()` functions to return the old
value the target contained prior to applying the operation. This makes this
API much more versatile and closer to C11 atomics.
Mark all pointers in the atomic utils API as `volatile` for the following
reasons:
1. The guarantees provided by `volatile` is a subset of the guarantees
provided by the atomic utils. This makes this fact more obvious.
2. Casting `volatile` off is undefined behavior. In order to be able to use
the atomic utils on memory mapped IO (which needs the `volatile` qualifier)
without resorting to undefined behavior, this API change is needed.