Add operator class and tests

This PR depends on #5 before it can be merged.

Also, the tests won't pass until the entity PR is merged.
Generally better to put the semi-colon on a line by itself after the chained calls.