HashWithIndifferentAccess better respects #to_hash

In particular, `.new`, `#update`, `#merge`, `#replace` all accept
objects which respond to `#to_hash`, even if those objects are not
Hashes directly.
Merge pull request #12550 from Peeja/hash-wia-update-respects-to-hash

HashWithIndifferentAccess#update respects #to_hash