Sort a list recursively list merge sort

In place sort in O(n lg n) time.

Seems simple, but quite tricky to implement