checkers: new Checker interface, add tests

This makes the checkers package actually useful.

I'm not sure about ending variable names with underscores. I can see myself getting that wrong a lot.