Refactor out the abstract type ConversionRule
Refactor out other rules to separate class files
Change way rules are applied to a simple list
Refactoring to make intent clearer
Remove redundant constructors
Remove more redundant constructors
...and even more code disappears. ConversionRule is now an interface
Minor rename for readability