Some updates for optimization.
1. For Map and Reduce, they call fetch_base_tile() instead of fetch() if the
   argument is Broacast. This function fetch the corresponding tile in the
   base array. It means these tiles are not broadcated immediately.
2. Current optimization sequence eliminates the chance to do parakeet for
   those MapExprs which have been fused into ReduceExprs. So we should do
   ReduceMapFusion last.
3. We should visit children inside ParakeetGeneration.visit_MapExpr().
   Otherwise we lose the chance to do parakeet for some MapExprs.
4. If all deps for a MapExpr are not FnCallExpr, it is not worth to do
   parakeet for it. (According to experiments, it usually get worse
   results)
Changes according to the  code review.
Changes according to the code review.
Change from code review
Merge branch 'master' into optimization

Conflicts:
	spartan/expr/base.py
Typo
Fix bug from previous merge.
Merge pull request #136 from fegin/optimization

Some updates for optimization.