add toString methods to similarity functions
improve logging of item-item build process
Build item-item build context with a provider
Implement sparse item-item neighbor iterator
Refactor neighbor iteration into a strategy

This makes neighbor selection for the default item-item model
builder a strategy with sparse and non-sparse implementations.
Update the release notes for #432.
Make FunkSVD use an updater object
Use custom object input stream to deserialize

Use a custom object input stream to use the user-specified class loader
for recommender engine deserialization.
Merge pull request #450 from grouplens/feature/elehack-class-loader

Use custom object input stream to deserialize
build on Java 8
allow Java 8 builds to fail
Load array classes in custom object stream

The custom class loader object input stream did not handle array classes
properly.  This uses ClassUtils to load them.
fix oraclejdk8 allowed failure
Merge pull request #438 from elehack/feature/elehack-funksvd-updater

Make FunkSVD use an updater object
Merge pull request #432 from grouplens/feature/elehack-iibuild-cleanup

Logging and performance improvements to the item-item builder
Write test for root-anchored matchers (#344)

This test verifies that root-anchored context matchers work.
Implement recommender engine builder

- Create LensKit recommender engine builder, providing API points for #449 and #337
- Factor out recommender engine building to new objects
Factor out recommender engine loader (#337)
Implement graph rewriting (#337)

- Add rewriting to engine builder
- Add rewriting to engine loader
- Re-enable rewriting-based tests
Update FunkSVD tests for rewriting (#337)

- Convert to Groovy
- Re-enable skipped tests