Rewrote Font.GetHashCode() to improve uniqueness

Added test cases to prevent reintroduction of collision scenarios observed in Font.GetHashCode().

Changes are per request in bug #14016. (https://bugzilla.xamarin.com/show_bug.cgi?id=14016)