Refactored MergeSort to be Generic uses an IList<T>
Uses IComparer<T> for comparison.
Refactored InsertionSort to be Generic uses an IList<T>
Refactored ShellSort to be Generic uses an IList<T>
Uses IComparer<T> for comparison.