Heavily refactor FunkSVD recommenders

Many changes!

- Add general-purpose matrix implementation (#333)
- Refactor FunkSVD to use it
- Abstract out generalized SVD item model and item scorer (enables #427, possibly some other things)

Right now, the FunkSVD item scorer is not derived from the general BiasedMFItemScorer. There isn't a lot of code to share yet, although I would introduce a relationship in the future.