Use ts-require for loading rules
Introduce rule factory, registry, superclass