function Pulse(dataflow, stamp, encode) {
    this.dataflow = dataflow;
    this.stamp = stamp == null ? -1 : stamp;
    this.add = [];
    this.rem = [];
    this.mod = [];
    this.fields = null;
    this.encode = encode || null;
  }
A Pulse enables inter-operator communication during a run of the
dataflow graph. In addition to the current timestamp, a pulse may also
contain a change-set of added, removed or modified data tuples, as well as
a pointer to a full backing data source. Tuple change sets may not
be fully materialized; for example, to prevent needless array creation
a change set may include larger arrays and corresponding filter functions.
The pulse provides a {@link visit} method to enable proper and efficient
iteration over requested data tuples.

In addition, each pulse can track modification flags for data tuple fields.
Responsible transform operators should call the {@link modifies} method to
indicate changes to data fields. The {@link modified} method enables
querying of this modification state.

@constructor
@param {Dataflow} dataflow - The backing dataflow instance.
@param {number} stamp - The current propagation timestamp.
@param {string} [encode] - An optional encoding set name, which is then
  accessible as Pulse.encode. Operators can respond to (or ignore) this
  setting as appropriate. This parameter can be used in conjunction with
  the Encode transform in the vega-encode module.