Pass the `SelectManager`, rather than the AST when querying w/ Relation

Arel specifically handles `SelectManager`, with the same logic we're
currently performing. The AST is `Enumerable`, which Arel looks for
separately now.
Deprecate `sanitize_sql_hash_` methods on ActiveRecord

These appear to be implementation relics of times past. They duplicate
the logic in Relation, and are no longer used internally.
Revert deprecation of `sanitize_sql_hash_for_assignment`

This method is still used by `update_all`
Handle `RangeError` from casting in `find_by` and `find_by!` on Relation

We should not behave differently just because a class has a default
scope.
Add an `assert_deprecated` for `sanitize_sql_hash_for_conditions`
Close database connections that fail the verify! check. More...

Normally, a database connection is leased, verified, reserved, and then
returned to the pool from the list of reserved connections
(on success or failure). If an exception is thrown in the verification
step, the connection is never reserved and therefore can not be found in
the reserved list to be returned to the pool.

The verification step will fail if there are database connectivity issues
(db restart, etc.) and will not return connections. Once all the
connections are used the server will no longer accept new connections
until it is restarted.

This change ensures that the connection is checked back into the pool if a
driver exception occurs during connection.verify!. This prevents the
connection being stuck in an 'in use' state.