AR::RecordNotSaved & RecordNotDestroyed from save!/destroy! should include an error message

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.

cc @arthurnn @rafaelfranca
Error messages should always mention why to help understand what went wrong.

  * You get `NameError` because its an `undefined local variable or method`.
  * You get `ArgumentError` because of `wrong number of arguments (Y for X)`.
  * You get `ActiveRecord::RecordInvalid` because `Field can't be blank`.
  * You get `ActiveRecord::RecordNotSaved ` because `before callback cancelled execution`.

What could be weird in the above examples? Don't you think the messages below are not weird? What's the point of having a error message?

  * You get `ActiveRecord::RecordNotSaved ` and says `failed to save the record`.
  * You get `ActiveRecord::RecordInvalid` and says `record is invalid`.
  * You get `ArgumentError` and says `argument(s) is incorrect`.
  * You get `NameError` and says `wrong name`.