Modified behaviour of insertion sort

Insertion sort now requires that the data to be sorted
be passed in. This helps because some of the sorts need to use insertion
on something other than the data being quicksorted.
Multithreading. Fix MPivot and tests.

collecctData.py now works in a multithreading fashion.

MPivot wasn't counting comparisons properly and it's minHeapOptimization wasn't
being tested. These are now fixed.
Massive refactoring

doInsertionSort, pivotSelectionMethod and insertionSortThreshold have been
moved to BaseQuicksort. This definitely cleans up how data is collected.

collectData now also collects data for different pivot selection methods.
This added a bunch of code which was defintely redundant so I refactored
it to hopefully be cleaner. There are more methods which are more concise.
Docs need to be written though :(
Added numPivots property to BaseQuicksort