Finalize all transformers, close all projections and the main log.
StreamChannels discovered in transformer projections are
auto-closed after finalize() runs — transformers don't need
to close them manually. If any transformer's finalize() raises,
the remaining transformers, projections, and the main log are
still closed; the first error is re-raised after cleanup
completes.