[libc++][ranges] Implement `uninitialized_value_construct{,_n}` and `uninitialized_fill{,_n}`.

Also:
- refactor out `__voidify`;
- use the `destroy` algorithm internally;
- refactor out helper classes used in tests for `uninitialized_*`
  algorithms.

Differential Revision: https://reviews.llvm.org/D115626

NOKEYCHECK=True
GitOrigin-RevId: 754ea6fd4d52f4699644a3c6dfc854a231c881c4
18 files changed