datastore: Return item iterator instead of dictionary for users and items.
Move method comment inline in movielens package.
Models: add __hash__() and __eq__ methods to User and Movie model.

This allows them to be used as keys in dictionaries.
Fix typo in comment.
Remove unneeded comments in ProduceRecommendation.
Rewrite methods in ProduceRecommendation.

- We are now passing users and items exclusively as objects. This removes
the need for passing the full list of users or items for looking up extra information.
- This also changes the order of some method arguments.
- Some methods are passed the user object even if they don't need it. This is for consistency.
Code cleanup in SimilarityMetrics. No change in API.
Remove unneeded comments.
Changes to get_closest_neighbors:

- Similarity vector calculation is moved into get_closest_neighbors.
  This is because the result was only used within the function body.
- The n closest neighbors are calculated with heapq.nlargest instead of a manual calculation.
- The function is passed a similarity measure function, because it makes testing easier.
Move debugging output to main.py.
Reflect changes to ProduceRecommendation API.

- Put N (as in N recommendations) to function argument.
Reflect changes in Recommender API. Disable evaluation.