only do Regexp === option once
remove options as an ivar
push options_constraints processing up

this lets us reduce is_a checks on the options_constraints and push
"callable constraints" verification to the right place.
only do is_a checks on `formatted` once
move options_constraints tests next to each other
add tests for nested lambda constraints
push some options munging to an alternate constructor
add tests for mixing :to and controller / action
use the factory method to construct the mapping
Fix regression on eager loading association based on SQL query rather
than existing column.

Fixes #15480.
Revert "test pg, we don't care about the internal state of `column#default`."

Revert "test pg, remove unused column assignments. Follow up to 254cdf47"

Related to #15492

This reverts commit 254cdf4728291277f3fbaa854f34495030e476b4.
This reverts commit 4bcf9029452e0c760af04faab6b549710401e8cf.

There are public methods that assume `Column#default` is type casted.
The return value of `Column#default` is publicly relevant and should not change.

/cc @sgrif
Routes specifying 'to:' must be a string that contains a "#" or a rack
application.  Use of a symbol should be replaced with `action: symbol`.
Use of a string without a "#" should be replaced with `controller: string`.
oops! :bomb:
Merge pull request #15447 from akshay-vishnoi/test-cases

Test `except!` in other cases too
Add default_i18n_subject to the guides

[ci skip]
force table creation
Merge pull request #15493 from bf4/relax_mail_dep

Relax mail gem constraint from ~> 2.5.4 to ~> 2.5
Merge pull request #15492 from sgrif/sg-dirty-defaults

Keep column defaults in type cast form
Pluralize params
Merge pull request #15172 from notEthan/active_record_pretty_print

implement ActiveRecord::Base#pretty_print

Conflicts:
	activerecord/CHANGELOG.md