Support sorting of mixed array List.Sort

A mixed List is sorted as per following rule.
1. Numbers are assumed to be smallest, then bool, string and pointers.
2. If the two objects are IComparable and of the same type, then use
it's native comparison mechanism.
3. If both inputs are value type, but one of them is bool, bool is
bigger
4. Otherwise Convert them all to double and compare.
5. Else If only one is value type, then value type object is smaller
6. Else If only one is string, then the string is smaller than other
7. Else don't know how to compare, so best campare them based on
HashCode.