The original RotateSlice doesn't traverse whole expression tree.
It stops when meeting a non-map expression.
To fixed this bug, three things have to be done:
1. It should traverse all nodes.
2. During rotating a slice down, the children of current may change.
   If any child becomes a Map expr, RotateSlice should traverse it
   again to avoid slice the child Map expr.
3. Step 2 can cause multiple MapMap fusions for the same maps. Current
   optimization is not idempotent. To avoid this, do RotateSlice before
   doing MapMapFusion.
Add some comments.
Merge branch 'master' into SliceRotation
comment
Merge remote-tracking branch 'upstream/master' into SliceRotation
Current optimization is not idempotent. This makes some tests failed
if we turn on slice rotation. Disable these tests until we fix the
idempotent issue.
Merge pull request #151 from fegin/SliceRotation

Slice rotation