refactor batch/range recommendation methods and fix bug

* previously we were *not* excluding training items with zero
  scores from recommendations, leading to top-k evaluation results
  potentially being under-reported (as these items are likely to
  take up places in the top-k and push out test items)
adding a simple reranking recommender

* rerank candidates from an item similarity model with scores based
  on a matrix factorization
ensure that prec@k penalizes missing predictions
Merge branch 'develop'