add item-based collaborative filtering.
add test for item-based cf
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)
add sort into expr
change svm code to allow optimization
Changes according to the  code review.
Changes according to the code review.
a much simpler and more scalable qr decomposition
Optimization bugs fixed
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.
Merge pull request #139 from MaggieQi/master

add sort into expr
Merge pull request #142 from fegin/optimization

Optimization bugs fixed
Bug fixed
some fixes
Merge pull request #135 from EasonLiao/cf

add item-based collaborative filtering.
fix expr
Merge pull request #140 from EasonLiao/fix_qr

a much simpler and more scalable qr decomposition