[ADT] use is_base_of inplace of is_same for random_access_iterator_tag checks
Replace std::is_same<X, std::random_access_iterator_tag> with std::is_base_of<std::random_access_iterator_tag, X> in STLExtra algos.
This doesn't have too much impact on LLVM internally as no structs derive from it.
However external projects embedding LLVM may use std::contiguous_iterator_tag which should be considered by these algorithms.
As well as any other potential tags people want to define derived from std::random_access_iterator_tag
Reviewed By: dblaikie
Differential Revision: https://reviews.llvm.org/D84141