Consolidate logic for making shared pointers to rules
Rename rules::RuleVisitor -> Visitor