This patch attempts to clean up the macro configuration mess in <__threading_support>, specifically the mess involving external threading variants. Additionally this patch adds design documentation for <__threading_support> and the configuration macros it uses.
The primary change in this patch is separating the idea of an "external API" provided by <__external_threading> and the idea of having an external threading library. Now _LIBCPP_HAS_THREAD_API_EXTERNAL means that libc++ should use <__external_threading> and that the header is expected to exist. Additionally the new macro _LIBCPP_HAS_THREAD_LIBRARY_EXTERNAL is now used to configure for using an "external library" with the default threading API.
Can you add another check so that this is not used together with LIBCXX_HAS_EXTERNAL_THREAD_API ?