It makes sense to decouple traits from the things they describe, since that's the purpose of traits. Furthermore, this will make it possible to reuse these traits from other places in the library (e.g. <semaphore>) outside of the synchronization library. Pre-C++20 support is removed as a drive-by since the synchronization library does not support pre-C++20 anymore. This makes it possible to simplify a few constructs by using concepts. Requested in https://github.com/llvm/llvm-project/pull/172214#discussion_r2635968291