Update the noexcept-ness of move-construction and move-assignment for basic_string. Use the new "is_always_equal" type trait for noexcept stuff when we're building with C++17. Preserve the conforming extension that we had before for C++14 and before.
Note that in C++17, if POCMA is true, then move-assigning an allocator cannot throw an exception.