[Libc++] Use #pragma push_macro/pop_macro to better handle min/max on Windows

Summary:
This patch improves how libc++ handles min/max macros within the headers. Previously libc++ would undef them and emit a warning.
This patch changes libc++ to use `#pragma push_macro`  to save the macro before undefining it, and `#pragma pop_macro` to restore the macros and the end of the header.

Reviewers: mclow.lists, bcraig, compnerd, EricWF

Reviewed By: EricWF

Subscribers: cfe-commits, krytarowski

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

llvm-svn: 304357
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: a016efb1dcda61e606e527b73791fbacf1bc9c86
diff --git a/include/module.modulemap b/include/module.modulemap
index 98b1870..3194b5c 100644
--- a/include/module.modulemap
+++ b/include/module.modulemap
@@ -484,7 +484,7 @@
   module __string { header "__string" export * }
   module __tree { header "__tree" export * }
   module __tuple { header "__tuple" export * }
-  module __undef_min_max { header "__undef_min_max" export * }
+  module __undef_macros { header "__undef_macros" export * }
 
   module experimental {
     requires cplusplus11