Implement `_was` and `changes` for in-place mutations of AR attributes

I have some doubts about this, if we have to go through such length to worry about people mutating the hash, can we just return a (frozen) copy?