Write a function that takes in an array of integers and returns a sorted version of that array using the Merge Sort algorithm.
Merge sort works by continuously dividing the array in half until it cannot be further divided. This means that if the array becomes empty or has only one element left, the dividing will stop, i.e. it is the base case to stop the recursion. If the array has multiple elements, split the array into halves and recursively invoke the merge sort on each of the halves. Finally, when both halves are sorted, the merge operation is applied.