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.
Rename `property` to `attribute`

For consistency with https://github.com/rails/rails/pull/15557
Correct Example output in Rails guides [ci skip]
Ensure time zones don't change after round trip with array columns

The times would be equivalent, even if they were in different time
zones. E.g. 12:00 UTC == 5:00 PDT
Merge pull request #15560 from aditya-kapoor/guide-fixes

Correct Example output in Rails guides [ci skip]
Do not type cast twice on attribute assignment

The definition of `write_attribute` in dirty checking ultimately leads
to the columns calling `type_cast` on the value to perform the
comparison. However, this is a potentially expensive computation that we
cache when it occurs in `read_attribute`. The only case that we need the
non-type-cast form is for numeric, so we pass that through as well
(something I'm looking to remove in the future).

This also reduces the number of places that manually access various
stages in an attribute's type casting lifecycle, which will aid in one
of the larger refactorings that I'm working on.
Merge pull request #15562 from sgrif/sg-double-type-cast-dirty

Do not type cast twice on attribute assignment
Merge pull request #15561 from sgrif/sg-time-zone-aware-arrays

Ensure time zones don't change after round trip with array columns
Merge pull request #15546 from sgrif/sg-lazy-decorators

Don't query the database schema when calling `serialize`
Merge pull request #15558 from sgrif/sg-rename-property

Rename `property` to `attribute`

Conflicts:
	activerecord/lib/active_record/attribute_methods/serialization.rb
	activerecord/lib/active_record/base.rb