Change the way reductions are built to use may-writes and not use
the transitive closure. This simplifies the process of creating
reduction dependences. It also eliminates the need for StrictWAW.
Reduction dependences (RED) are widened. This is different
from previous behaviour where the reduction dependences were "exact"
while TC_RED was the widened dependences.
This also affected the matrix multiplication pattern match. It earlier
used to expect reduction dependences to look like:
S(i0, i1, ..., ik, ... in) -> S(i0, i1, ..., ik + 1, ...in)
Now, that is no longer possible since the reduction dependences will be
wider, and will look like so:
S(i0, i1, ..., ik, ... in) -> S(i0, i1, ..., ok, ...in) where ik < ok < N.
So, we choose to allow anything along the "ok" dimension, since the other
checks make sure that illegal memory access cannot happen
in the first place.