code: @NonNull
      public ListenerToken addChangeListener(Executor executor, @NonNull ReplicatorChangeListener listener) {
          if (listener == null) { throw new IllegalArgumentException("listener cannot be null."); }
  
          synchronized (lock) {
              if (listener == null) { throw new IllegalArgumentException(); }
              final ReplicatorChangeListenerToken token = new ReplicatorChangeListenerToken(executor, listener);
              changeListenerTokens.add(token);
              return token;
          }
      }
docs: Set the given ReplicatorChangeListener to the this replicator.
  
  @param listener