Rename `type_cast` to `type_cast_from_database`

In some cases there is a difference between the two, we should always
be doing one or the other. For convenience, `type_cast` is still a
private method on type, so new types that do not need different behavior
don't need to implement two methods, but it has been moved to private so
it cannot be used accidentally.
Merge pull request #15592 from sgrif/sg-type-cast-from-database

Rename `type_cast` to `type_cast_from_database`
Timestamp values should be present on callbacks

This reverts commit dd3ea17191e316aeebddaa7b176f6cfeee7a6365 and add a
regression test.

Fixes #15418
Fix bug that make HashWithIndifferentAccess work differently of Hash

Before HashWithIndifferentAccess were doing deep_dup of the inner hashes
when Hash doesn't do. Now both are behaving in the same way.
add has_one? method and reuse instead of checking macro

Instead of checking for `macro == :has_one` throughout the
codebase we can create a `has_one?` method to match the `belongs_to?`,
`polymorphic?` and other methods.
Abstract away use of HABTM macro

By having the `:has_and_belongs_to_many` macro in the `@collection`
we are punishing `:has_many` associations because it has to allocate
the array and check the macro.

@collection is returned to `macro == :has_many` and a new reflection
class `HABTMReflection` is created to handle this case instead.
Merge pull request #15595 from eileencodes/abstract-away-habtm-macro

Abstract away use of HABTM macro
Merge pull request #15596 from eileencodes/add-has_one-method-and-reuse

add has_one? method and reuse instead of checking macro
reuse available collection? check instead of macro

Reflection has an available method that is used to check if the
reflection is a collection. Any :has_many macro is considered a
collection and `collection?` should be used instead of
`macro == :has_many`.
Merge pull request #15597 from eileencodes/reuse-available-collection-methods

reuse available collection? check instead of macro
Use HasAndBelongsToMany instead of HABTM
Merge pull request #15599 from arthurnn/HABTMAssociation

Use HasAndBelongsToMany instead of HABTM
[ci skip] Add note about type modifiers that cannot be specified in command line.
Merge pull request #15602 from JuanitoFatas/doc/type-modifier

[ci skip] Add note about type modifiers that cannot be specified in command line.
ActiveRecord::FinderMethods.find passes proc parameter #15382
Merge pull request #15584 from jamesyang124/issue_15382

ActiveRecord::FinderMethods.find doesn't pass proc parameter to array

Manual merge of #15584.

Closes #15584.
[ci skip] Rename: Rails Database Migration to Active Record Migration.

This will need to setup permanent redirect for the old guide.
Merge pull request #15604 from JuanitoFatas/doc/migration

[ci skip] Rename: Rails Database Migration to Active Record Migration.