Optimization to check whether any ReduceSink operator in the plan can be
simplified so data is not shuffled/sorted if it is already shuffled/sorted.
This optimization is executed after join algorithm selection logic has run,
and it is intended to optimize new cases that cannot be optimized when
ReduceSinkDeDuplication
runs because some physical algorithms have
not been selected. Instead of removing ReduceSink operators from the plan,
they will be tagged, and then the execution plan compiler might take action,
e.g., on Tez, ReduceSink operators that just need to forward data will be
translated into a ONE-TO-ONE edge. The parallelism degree of these ReduceSink
operators might be adjusted, as a ReduceSink operator that just forwards data
cannot alter the degree of parallelism of the previous task.