The system is based on strokes framework. First, we declare KisNodeVisitor's visitAll() method as deprecated. The visitor should only do what it is intended to do: be able to visit a node of any type and describe this action. All the other tasks are left for special classes.
So now the visitor can be defined as "exclusive" and "sequential". These properties totally correspond to the properties of the stroke running this visitor. If the visitor is defined "exclusive" then all the updater threads will be stopped until the visitor has processed all the requested nodes. If the visitor is defined as "sequential", then all the nodes will be processed one-by-one instead of concurrently.
KisNodeProcessingStrategy and NodeProcessingData are just wrappers for the visitor. This is the way how strokes framework works.
KisNodeProcessingStrokeStrategy (what an ugly name!). This class is supposed to do two things. First, it stores the informations about the visitor (sequential, exclusive). And second, it performs an update of the image after the processing is done. Both these tasks are done in a way to support undo().