Change RuleSet arguments

RuleSet.__init__ only takes one iterable argument, so change it to *arg
instead.
Test order of rule types is preserved
Major internal rework, remove 'Rule' -> 'RuleSet'

Remove the Rule class heirarchy, and replace with different (RuleType)Set for
each rule type. Queries can be delegated to these and application is simpler.
This makes the top-level RuleSet much simpler, and also makes the internal
hierarchy much more straightforward. External-facing API not greatly changed.