Refactor Rules subsystem
- Moves rules-related source into a new "rules" top-level directory.
- Splits rules-related classes into separate files.
- Replaces some unscoped enums with enum classes.
- Adds property structs and replaces macros with labmdas and templates.
- Adds a clang-format CI job and enforces it on the win and rules subdirectories.
Closes #90 (closed)