fork(flags) {
      const p = new Pulse(this.dataflow).init(this, flags & this.NO_FIELDS);
      if (flags !== undefined) {
        if (flags & p.ADD) this.visit(p.ADD, t => p.add.push(t));
        if (flags & p.REM) this.visit(p.REM, t => p.rem.push(t));
        if (flags & p.MOD) this.visit(p.MOD, t => p.mod.push(t));
      }
      return p;
    }
Creates a new pulse based on the values of this pulse.
The dataflow, time stamp and field modification values are copied over.
@return {Pulse}