Add ModularLoopPipelineBlocks base and __call__ contracts
ModularPipelineBlocks now defines an abstract __call__ raising a clear
NotImplementedError. Loop steps get their own base class,
ModularLoopPipelineBlocks, whose only difference is the __call__ contract
(accepts the enclosing loop's variables after (components, state)).
IterativePipelineBlocks validates at construction that every sub-block is
a ModularLoopPipelineBlocks or a nested IterativePipelineBlocks, in
addition to the signature validation before the first iteration.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>