Replacing bitonic sort with parallel merge sort

Parallel merge sort is more efficient than bitonic merge sort.

This implementation of parallel merge sort is still pretty inefficient. It
does an independent binary search on every input to each output. These
could be consolidated if we knew more about how the parallel scheduling
happens. It might be possible to organize the outputs better.
Merge branch 'merge-sort'