changelog for #15556 and credit @kuldeepaggarwal [Kuldeep Aggarwal]

This is a follow up to #15556

@kuldeepaggarwal did submit this patch way back (#13624).
Don't rely on `Time.current` in tests

Millisecond inequality causes failures on Travis
Merge pull request #15557 from sgrif/sg-specify-time-zone

Specify a time zone when testing TZ aware attributes
Remove duplicated `@raw_attributes.keys`

Reduces the number of things outside of attribute methods that cares
about the details of how we store and type cast attributes
Merge pull request #15563 from sgrif/sg-raw-attributes-access

Remove duplicated `@raw_attributes.keys`
Remove dead branch when restoring ID within a transaction

There is no way to have an instance of an Active Record model where
`has_attribute?(self.class.primary_key)` returns false. The record is
always initialized in such a way that `@raw_attributes` will have an id
key with nil for the value.
Move conditionals about freezing closer to the definition of `freeze`

Reduces the number of places that care about the internals of how we
store and type cast attributes. We do not need to go through the
dup/freeze dance, as you couldn't have saved a frozen new record anyway,
and that is the only time we would end up modifying the frozen hash.
Merge pull request #15565 from sgrif/sg-no-unfreezing

Move conditionals about freezing closer to the definition of `freeze`
Merge pull request #15564 from sgrif/sg-remove-dead-code

Remove dead branch when restoring ID within a transaction

Conflicts:
	activerecord/lib/active_record/transactions.rb