preview method
What steps say they would do, in order. Nothing is performed.
Asking costs nothing and may be asked repeatedly — the guarantee belongs to Step.preview, and this only collects.
Implementation
List<Preview> preview(Iterable<Step> steps) =>
List.unmodifiable(steps.map((step) => step.preview()));