The implementation of Operation is currently quite a mess. I'd like to instead clean up the internals so that it makes more sense. The main points of this issue are:
This should mean that it's easier to make changes that involve Operation in the future.