When the Debug mode is enabled, we disable extern declarations because we
don't want to use the functions compiled in the library, which might not
have had the debug mode enabled when built. However, some extern declarations
need to be kept, because code correctness depends on it.
31e820378b8a removed those declarations, which had the unintended
consequence of breaking the debug build. This commit fixes that by
re-introducing a separate macro for the required extern declarations,
and adds a comment so that we don't fall into that trap in the future.
Isn't it possible that both _LIBCPP_DEBUG_LEVEL >= 1 and defined(_LIBCPP_DISABLE_EXTERN_TEMPLATE) are true, and so _LIBCPP_EXTERN_TEMPLATE will be defined twice?