Refactor compound evaluators.

This simplifies the interface a bit.
I did not know that was valid Ruby!