Calling reset on a collection association should unload the assocation

Need to define #reset on CollectionProxy.
Remove duplicate merge
put core at the beginning so other classes can modify the behavior
Merge pull request #13790 from kschlarman/collection_association_reset_fix

Calling reset on a collection association should unload the assocation
Make CollectionProxy#reset return self
Improve the CHANGELOG entry [ci skip]
Merge pull request #13791 from kei-s/remove_duplicate_merge

Remove duplicate merge
Move changed_attributes into dirty.rb
Move serialization dirty into serialization.rb
Merge pull request #13799 from kbrock/better_dirty

Better ActiveRecord hierarchy for Dirty and others
Add `serialize :some_attr, dirty: :never`

Adds an optional last argument to `serialize`,
that allows you to turn off the automatic writes
of serialized fields:

    class MyModel < ActiveRecord::Base

      # some_field gets written on every write
      serialize :field1
      # same as above
      serialize :field2, dirty: :always
      serialize :field3, Object, dirty: :always

      # field4 only gets written, if
      # field4_will_change was called
      serialize :field4, dirty: :never
    end

The current second argument, `class_name`, still
works and is optional as well. This patch, is
fully backwards compatible.

TODO Consider rolling the attribute coder into a
     consolidated options hash

TODO Add `:hash` and `:clone` options to track
     changes on serialized columns automatically
     (this comes at a cost)
Implement `dirty: :hash` and `dirty: :clone`

Pull in @kbrock's changes from rails master. Still
a WIP. Want to figure out what the right interface
is first