We need them for iterator-based interfaces. Invoker hides the difference between different (session/expanded) iterators here.
Somewhat similar to invoker, but changing the state (or just creating a transaction). Transaction creation could've been put into a structure of its own, but it seems to be less convenient to use this way.