Replace `type_cast` case statement with delegation

All subclasses of column were now delegating `type_cast` to their
injected type object. We can remove the overriding methods, and
generalize it on the `Column` class itself. This also enabled us to
remove several column classes completely, as they no longer had any
meaningful behavior of their own.
Merge pull request #15203 from sgrif/sg-delegate-type-cast

Replace `type_cast` case statement with delegation