Wiring in shadow extraction

WIP: @markhibberd 
Mark is cleaning/changing this on another branch, but can we only invoke `SyncExtract.outputDataset` once to reduce boilerplate? Might mean returning `output` from each case statement. /notsure