Fix incorrect SmartCompare logic

This sort logic was resulting in "01" appearing after "1" when it should
really appear first.

The cause was that "01" and "1" are converted to numbers and then compared.
Since they are equal in value, their sort order does not change.

The result is to fallback to String.CompareTo if double.CompareTo
returns 0.