pipelines
Centralised preprocessing pipelines (ordered lists of typed transforms).
Raw model inference is cached unprocessed (see model_inference step), so the
format-specific transforms a consuming step needs are applied just-in-time
inside that step. A pipeline is an ordered list of typed PreprocessingConfig;
the transforms it should run against a given frame are selected by a shape
detector (see bitfount.preprocessing.detectors).
The pipelines live here — rather than inside a single step — because more than one step shares them (the pathology-to-segmentation pipeline is used by both GA calc steps and the PDF report).