Refactor `Vec::map_in_place` to move code out of `PartialVec`

Additionally, support zero-sized types.
Use slice syntax instead of slice_to, etc.
Remove the `_` suffix from slice methods.

Deprecates slicing methods from ImmutableSlice/MutableSlice in favour of slicing syntax or the methods in Slice/SliceMut.

Closes #17273.
Put slicing syntax behind a feature gate.

[breaking-change]

If you are using slicing syntax you will need to add #![feature(slicing_syntax)] to your crate.
auto merge of #17381 : tbu-/rust/pr_mapinplace2, r=aturon

Additionally, support zero-sized types.

Now there isn't a safe interface of `PartialVec` anymore, it's just a bare data structure with destructor that assumes you handled everything correctly before.
Review and rebasing changes
auto merge of #17620 : nick29581/rust/slice4, r=aturon

cc @aturon 

r? anyone?