[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
diff --git a/include/module.modulemap b/include/module.modulemap
index 1cd5c83..12e0a15 100644
--- a/include/module.modulemap
+++ b/include/module.modulemap
@@ -650,6 +650,7 @@
       module uninitialized_algorithms        { private header "__memory/uninitialized_algorithms.h" }
       module unique_ptr                      { private header "__memory/unique_ptr.h" }
       module uses_allocator                  { private header "__memory/uses_allocator.h" }
+      module voidify                         { private header "__memory/voidify.h" }
     }
   }
   module mutex {