Various structural changes to support ModelBased recommenders. Details are in commit message.

- Rename ModelBased to MemoryBased.
- Create proper ModelBased.
- Create Recommender interface, which is extended by MemoryBased and ModelBased.
- Ensure all code working with Recommenders use the Recommender interface