Stop using instance exec for type decorators

We are moving this behavior out to an object that we would like to keep
separated from `ActiveRecord::Base`, which means not passing the class
object to it. As such, we need to stop using `instance_exec`, and
instead close over the subclass on global type decorators that are
applied in `Base`.
Merge pull request #15938 from sgrif/sg-stop-instance-execing

Stop using instance exec for type decorators