Remove redundant substitute index when constructing bind values

We end up re-ordering them either way when we construct the Arel AST (in order
to deal with rewhere, etc), so we shouldn't bother giving it a number in the
first place beforehand.
Remove redundant require of file

This file was required inside 'test/validators/namespace/email_validator.rb'
that's already required here. Therefore I removed the redundant required.
Don't needlessly alphabetize columns for insert/update

This slightly simplifies the code, and reduces the number of times we
need to iterate over the attributes by one.
Merge pull request #17477 from Adam89/ma-remove-redundant-require

Remove redundant require of file
Merge pull request #17463 from mrgilman/remove-index-from-substitute-at

Remove redundant substitute index when constructing bind values
Use bind values for joined tables in where statements

In practical terms, this allows serialized columns and tz aware columns
to be used in wheres that go through joins, where they previously would
not behave correctly. Internally, this removes 1/3 of the cases where we
rely on Arel to perform type casting for us.

There were two non-obvious changes required for this. `update_all` on
relation was merging its bind values with arel's in the wrong order.
Additionally, through associations were assuming there would be no bind
parameters in the preloader (presumably because the where would always
be part of a join)

[Melanie Gilman & Sean Griffin]
Fix test which failed in isolation

It was transitively relying on the vertex model being loaded
[ci skip] `Relation#bind` is not public API
Add link to API Documentation Guidelines

Link to the "English" section to specify American English be used for the Guides
[ci skip]
Merge pull request #17482 from djpowers/patch-1

Add link to API Documentation Guidelines [ci skip]
Correctly cast calculation results on PG

MySQL reports the column name as `"MAX(developer_id)"`. PG will report
it as `"max"`
Use a bound parameter for the "id = " portion of update statements

We need to re-order the bind parameters since the AST returned by the
relation will have the where statement as the first bp, which breaks on
PG.
Add a test case for range type casting

We support this behavior, but have no tests which assert that type
casting actually occurs.
allow array or hash syntax for partial index conditions