Fix promise rejection during validation

fixes #3013
- bubble promise rejection on post model validation/save error so that it doesn't bubble as resolved
- prefer `.catch()` for promise handlers as per recommendations
- check if `.save()` is being called from `model.destroyRecord()` and forgo validation if so
- normalize output for both `.validate()` and `.save()`