Add an observer triggered by get_validation_rules() when $validation_rules is empty

Allows the model to generate validation rules or otherwise handle the
empty($this->validation_rules) || ! is_array($this->validation_rules)
condition.
- The function is expected to return a non-empty array of validation
rules suitable for assignment to $this->validation_rules.
- If the observer returns an empty or non-array result,
get_validation_rules() will return an empty array
Documentation for get_validation_rules() observer

Documentation for previous commit b3920e6 and related to #875
Add ability to change name of model's deleted field for soft-deletes

- Defaulted the field name to 'deleted' for backwards compatibility
- Added a public get_deleted_field() method so the Controller can modify
queries without assuming the name of the field
- Updated delete()/delete_where() methods' handling of soft_deletes to
use $this->deleted_field in place of the hard-coded field name
('deleted')
- Added $deleted_field and $deleted_by_field to the skeleton in the
model docs (though soft_deletes and log_user are false in the skeleton)
- Added a note in the documentation for soft_deletes, set_created, and
set_modified mentioning the variable that can be used to change the name
of each field
-