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 pull request #152 from MaggieQi/master

add load balance for spartan: just simply migrate tiles to other workers.
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
Current reshape and transpose doesn't have `tiles` variable which
is be needed by some expressions' foreach().
Update 'INSTALLATION from source' in README.md
Merge pull request #154 from fegin/developing

Let reshape and transpose have `tiles` variable.
Merge branch 'master' of github.com:spartan-array/spartan
remove local reduction