Add `before_validation` callbacks

This adds `before_validation` callbacks so a model can hook
into and modify itself before validations are run. This follows
AR's callbacks and provides more flexibility and features when
defining model behavior.