[libc++] Ensure that all public C++ headers include <__assert>

This patch changes the requirement for getting the declaration of the
assertion handler from including <__assert> to including any public
C++ header of the library. Note that C compatibility headers are
excluded because we don't implement all the C headers ourselves --
some of them are taken straight from the C library, like assert.h.

It also adds a generated test to check it. Furthermore, this new
generated test is designed in a way that will make it possible to
replace almost all the existing test-generation scripts with this
system in upcoming patches.

Differential Revision: https://reviews.llvm.org/D122506

NOKEYCHECK=True
GitOrigin-RevId: 385cc25a531a72c393cee44689e2c3194615bcec
diff --git a/include/filesystem b/include/filesystem
index afb75df..c23cac9 100644
--- a/include/filesystem
+++ b/include/filesystem
@@ -8,6 +8,7 @@
 //===----------------------------------------------------------------------===//
 #ifndef _LIBCPP_FILESYSTEM
 #define _LIBCPP_FILESYSTEM
+
 /*
     filesystem synopsis
 
@@ -238,6 +239,7 @@
 
 */
 
+#include <__assert> // all public C++ headers provide the assertion handler
 #include <__config>
 #include <__filesystem/copy_options.h>
 #include <__filesystem/directory_entry.h>