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)