Completed initial implementation of parallel sort.  It uses an in-place ...

...merge sort implemented with parallel block exchange.  The time limit isn't set up yet, but all the parallel algorithms are cancellable.
@bsoetaer 
I believe this doesn't work quite right in that it does work over. 
i.e. consider array [7,6,5]
Split into [7] and [6,5]
Merge in sort causes it to be [7] and [5,6]
now merge in sort is called to merge it all back together
values = [7,5,6], upper_start = 1
upper_median_index = 2, median = 5, lower_median_index = 0
exchange is called with slice = [7,5,6] start_upper = 1
[7] goes fine but [5,6] turns back to [6,5] in first run_parallel
then mirror called on [7,6,5]. lower will == upper so get [6,7,5] out of exchange.
upper_start = 2
run_parallel first thread gets [6,7] second gets [5]
total ends up being [6,7,5] which is incorrect