New secondary-propagation system
Change RowDataProvider to use AtomicLongs instead of synchronized blocks

One behaviour change: finish() is no longer idempotent.