Don't always mark defaults as dirty for some types

The contract of `_field_changed?` assumes that the old value is always
type cast. That is not the case for the value in `Column#default` as
things are today. We need to type cast before comparing.