Algorithm performance improvements

A few improvements

- Refactor the user-user CF implementation to have a saner boundary between the scorer and neighborhood-finding code, and implement a working snapshotting neighbor finder.
- Give the FunkSVD build process better cache locality
- Some evaluation enhancements