Major BC breaking reorganization

This commit breaks the class structure and API completely from v1 and the prior develop-2. Of special importance

- validate and sanitize rules are split from each other, and use the __invoke() method to be callable

- instead of passing a value proper to be filtered, the system passes the entire subject and a field name to the rule. this allows us access to the subject for comparisons and other manipulations.