Makes the following operations constexpr:
- std::swap(optional, optional)
 - optional(optional<U> const&)
 - optional(optional<U>&&)
 - ~optional()
 - operator=(nullopt_t)
 - operator=(U&&)
 - operator=(optional<U> const&)
 - operator=(optional<U>&&)
 - emplace(Args&&...)
 - emplace(initializer_list<U>, Args&&...)
 - swap(optional&)
 - reset()
 
P2231 has been accepted by plenary, with the committee recommending
implementers retroactively apply to C++20. It's necessary for us to
implement _`semiregular-box`_ and _`non-propagating-cache`_, both of
which are required for ranges (otherwise we'll need to reimplement
std::optional with these members constexprified).
I don't think this note is useful anymore.