[libc++] Optimize basic_string::operator= (#224535)

This improves a few things in the long string code path. Specifically:
- The null terminator is copied from the assigned-from string instead of
setting it manually
- various branches have been removed via `__assume`s that are known
- `memmove` is tail-called by updating the pointer and size of the
string first and not returning `this` anymore
- the allocating path is outlined into a separate function, which
basically amounts to manual shrink-wrapping (this should be removed once
LLVM is able to do this on its own)

GitOrigin-RevId: 420f6d1b1f277b8861ef7454164b5a940d1bcf24
2 files changed