Add an inplace partition operation
This should save multiple traversals over the data set