Generic comparator for use comparing lists of objects. Compares using the
 following rules (in order):
 
 - If both objects are Comparable, they are compared using the Comparable
 interface
 
 - If the object is convertible to a string using the javatools
 ToStringManager the string representation is compared.
 
 - toString is used to create a String representation that is then compared.
 
 
 
 For non primitive objects, this Comparator is only designed to compare lists
 that contains objects all of the same class.
 
 When dealing with numbers, a String representation of a number, and its
 Number representation will equate, as will different Number implementations.
 i.e. "1", 1 and 1D are all the same to
 this Comparator, but all number representations will compare in numerical,
 not alphabetical order so "10" is greater than "2".