new merge sort implementation