public default <A> TraversalSource withSideEffect(final String key, final A initialValue, final BinaryOperator<A> reducer) {
        final TraversalSource clone = this.clone();
        SideEffectStrategy.addSideEffect(clone.getStrategies(), key, initialValue, reducer);
        clone.getGremlinLang().addSource(TraversalSource.Symbols.withSideEffect, key, initialValue, reducer);
        return clone;
    }
Add a sideEffect to be used throughout the life of a spawned {@link Traversal}.
This adds a {@link SideEffectStrategy} to the strategies.

@param key          the key of the sideEffect
@param initialValue the initial value of the sideEffect
@param reducer      a reducer to merge sideEffect mutations into a single result
@return a new traversal source with updated strategies
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java