[BUGFIX beta] gate reduceComputed item property changes.

When multiple items in an upstream CP have a property that a reduce cp's
`DependentArrayObserver` is watching, and that property depends on some shared
other property, it is possible for `flushChanges` to be called before all the
items have had their caches cleared.

This commit ensures that the item property changes are flushed on the *last*
item's property change, rather than the *first* item's property change.  This
used to be handled via the run loop, but now that reduce CPs are synchronous (to
keep them more in line with regular CPs) we need to gate these changes with a
semaphore.

Fix #4967.