Further simplify `changed?` conditional for numeric types

`Type::Integer.new.type_cast('') # => nil`, we do not need a special
case to handle this, `nil => ''` already returns false. The only case we
need to handle is `0 => 'wibble'` should be changed, while `0 => '0'`
should not.
Merge pull request #15814 from sgrif/sg-number-changed

Further simplify `changed?` conditional for numeric types