important change: validate() now uses $this in place of ::self, which allows subclasses to actually instantiate validators and have them run at save() time.