added extra field to Rule classes
completely switched to rule objects and updated tests
changed code to consider all applicable rules, and break ties via some function
Added way to enumerate all solutions