Refactor AndOr

Responds to some feedback from @whitequark. Unfortunately we cannot
alias a method calling `super` if that method does not exist in the
superclass, so extracting a helper method is probably the best way to
improve the readability of the code here.