allow for custom propagator predicates in dataflows

The default behavior is to propagate when inputs change. In some
cases we would like to have different behavior. Alternative behaviors
include: always propagating, propagating when a threshold is reached or
never propagating.