This replaces boost::thread and most mutexes and condition variables with
std equivalents. It also adds support for std lock types to the strictest_lock
type trait.
This significantly, although not completely, reduces the dependency on
Boost.Thread.
Refs https://github.com/boostorg/log/issues/232.
Explicit specification of attribute value type is necessary when it cannot
be inferred from the function object type. With C++20 removing argument type
typedefs from standard function objects, like std::less, and compilers following
suit (e.g. future MSVC versions), it is better to update the example so that
it is compatible with future compilers.
Related to https://github.com/boostorg/log/issues/105.