feat: add openmp implementation of sort
feat: add openmp implementation of sort

The function first split a vector into sub-ranges. Then sort each
sub-ranges in parallel using std::sort. After that, it merge those
sub-ranges recursively, in parallel.

Since it does not implement in-place merge algorithm, it requires
twice as much memory to sort. Later it might be improved.

ToruNiina/Mjolnir,ToruNiina/Mjolnir,ToruNiina/Mjolnir