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.