Don't query the database schema when calling `serialize`

We need to decorate the types lazily. This is extracted to a separate
API, as there are other refactorings that will be able to make use of
it, and to allow unit testing the finer points more granularly.
What's the user benefit or having to provide names to decorators of the same class and attribute (and supporting multiple decorators for same class and attribute)? Wouldn't this be simpler?

`Model.decorate_attribute_type(:a_string) { |t| StringDecorator.new(t) }`

Sure, `sub`classes may want to chain decorations, but then it should still work from API perspective:

`ChildModel.decorate_attribute_type(:a_string) { |t| StringDecorator.new(super(t)) }`

`super` would call the parent decorator, so user can choose whether to inherit or completely override a decoration on a subclass, instead of inheriting being always implied.