This commit adds missing support for constexpr in std::array under all
standard modes up to and including C++20. It also transforms the <array>
tests to check for constexpr-friendliness under the right standard modes.
It does change one bit of behavior from the previous array implementation,
notably the fact that begin() and end() on an empty std::array will now
return nullptr. This implementation is allowed by the current wording
for std::array, however if https://wg21.link/LWG2157 goes through, we'll
have to change that strategy for one where different empty arrays have
iterators to different underlying ranges.
Fixes https://llvm.org/PR40124
Fixes rdar://57522096
Supersedes https://reviews.llvm.org/D60666
This should be after C++11. In C++11 this won't be an aggregate (__w is a non-static member without initialization).