Add SmallVectorImpl::truncate(), a variant of resize() that cannot
increase the size.
- Compared to resize(), this has no code path for growing the allocation and can be better optimized.
- Compared to set_size(), this formally calls destructors, and does not skip any constructors.
- Compared to pop_back_n(), this takes the new desired size, which in many contexts is more intuitive than the number of elements to remove.
The immediate motivation is to pair this with resize_for_overwrite()
to remove uses of set_size(), which can then be made private.
See also: https://reviews.llvm.org/D115380