Raise `RecordNotDestroyed` when children can't be replaced

Fixes #12812
Raise `ActiveRecord::RecordNotDestroyed` when a child marked with
`dependent: destroy` can't be destroyed.

The following code:
```ruby
class Post < ActiveRecord::Base
  has_many :comments, dependent: :destroy
end

class Comment < ActiveRecord::Base
  before_destroy do
    return false
  end
end

post = Post.create!(comments: [Comment.create!])
post.comments = [Comment.create!]
````

would result in a `post` with two `comments`.
With this commit, the same code would raise a `RecordNotDestroyed`
exception, keeping the `post` with the same `comment`.
move changelog entry to the top
Merge pull request #13042 from brianstorti/fix-dependent-destroy-12812

Raise `RecordNotDestroyed` when children can't be replaced
`rename_index`: add the new index before removing the old one.

This prevents the following error when a MySQL index on a foreign key
column is renamed:

```
ActiveRecord::StatementInvalid: Mysql2::Error: Cannot drop index 'index_engines_on_car_id': needed in a foreign key constraint: DROP INDEX `index_engines_on_car_id` ON `engines`
```

refs: #13038.
remove leftover firebird adapter tests.
tyop
sync example and documentation for strong_parameters hash whitelisting.

[ci skip]

This is a follow up to #12609 and integrates #12158.

Thanks @aspiers.
Closes #12158.
Merge pull request #13049 from senny/remove_firebird_tests

remove leftover firebird adapter tests.
changed update counter to act on unscoped model
Merge pull request #13018 from heruku/scoping_fix

changed update counter to act on unscoped model
Add branch to arel in Gemfile so that we can use local repos [ci skip]
Minor typo fixes
Added some failing tests where the JSON encoder is not resolving as_json correctly
Expanded coverage on JSON encoding
Removed support for encoding BigDecimal as a JSON number

This is because the new encoder will no longer support encode_json.
Therefore our only choice is to return `to_i` or `to_s` in
`BigDecimal#as_json`. Since casting a BigDecimal to an integer is
most likely a lossy operation, we chose to encode it as a string.

Support for encoding BigDecimal as a string will return via the
`activesupport-json_encoder` gem.
Removed the Ruby encoder and switched to using the JSON gem

Got all the tests passing again.

Support for `encode_json` has been removed (and consequently the
ability to encode `BigDecimal`s as numbers, as mentioned in the
previous commit). Install the `activesupport-json_encoder` gem
to get it back.
Make the JSON encoder pluggable
Process::Status should get a :nodoc: [ci skip]
Be explicit and use the actual unicode sequence
More typo fixes