[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/src/condition_variable.cpp b/src/condition_variable.cpp
index 3f60727..2200aef 100644
--- a/src/condition_variable.cpp
+++ b/src/condition_variable.cpp
@@ -14,6 +14,7 @@
 #include "condition_variable"
 #include "thread"
 #include "system_error"
+#include "__undef_macros"
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
diff --git a/src/ios.cpp b/src/ios.cpp
index 7c76ca2..0f1d88e 100644
--- a/src/ios.cpp
+++ b/src/ios.cpp
@@ -22,6 +22,7 @@
 #include "new"
 #include "streambuf"
 #include "string"
+#include "__undef_macros"
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
diff --git a/src/locale.cpp b/src/locale.cpp
index 4163c2c..3d61fbe 100644
--- a/src/locale.cpp
+++ b/src/locale.cpp
@@ -36,6 +36,7 @@
 #endif
 #include <stdlib.h>
 #include <stdio.h>
+#include "__undef_macros"
 
 // On Linux, wint_t and wchar_t have different signed-ness, and this causes
 // lots of noise in the build log, but no bugs that I know of. 
diff --git a/src/mutex.cpp b/src/mutex.cpp
index b858e88..c36bd55 100644
--- a/src/mutex.cpp
+++ b/src/mutex.cpp
@@ -12,6 +12,7 @@
 #include "limits"
 #include "system_error"
 #include "include/atomic_support.h"
+#include "__undef_macros"
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 #ifndef _LIBCPP_HAS_NO_THREADS
diff --git a/src/strstream.cpp b/src/strstream.cpp
index be94f9c..01523cf 100644
--- a/src/strstream.cpp
+++ b/src/strstream.cpp
@@ -13,6 +13,7 @@
 #include "cstring"
 #include "cstdlib"
 #include "__debug"
+#include "__undef_macros"
 
 _LIBCPP_BEGIN_NAMESPACE_STD