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.
@throws