[libc++][ranges] Implement `ranges::shuffle`.Differential Revision: https://reviews.llvm.org/D130321
[libc++][ranges] Make range algorithms support proxy iteratorsAlso test all the range algorithms to verify the support.Differential Revision: https://reviews.llvm.org/D129823
[libc++] Make _LIBCPP_DEBUG_RANDOMIZE_RANGE a functionReviewed By: ldionne, Mordante, var-const, #libcSpies: mgorny, libcxx-commitsDifferential Revision: https://reviews.llvm.org/D128181