top-down mergesort implementation using lists/arrays to divide and conquer