Fixed a bug where AR::RecordNotSaved & RecordNotDestroyed lost an error message

Since 3e30c5d4222f816cdffd5241d56ef9442f6d1903, `AR::RecordNotSaved` and `AR::RecordNotDestroyed` started ignoring error messages. This commit changes the behavior of `#initialize` so that these exceptions no longer lose the given message.

Also, when calling `AR::Base.save!` or `AR::Base.destroy!` and raising one of the exceptions, give a meaningful error message so that people can easily understand why it's failing to save/destroy.
@arthurnn if you are taking about this line, you are right. However, although we could consider this is an improvement not a bug fix, I don't think extracting this part is a good idea as we need to do something like below:

```ruby
create_or_update || raise(RecordNotSaved.new(nil, self))
```