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.
Improve double-checked locking efficiency

This improves the DCL efficiency of some commonly-used classes
(Effective Java 71), loading the volatile field into a local
variable.
Removed unused lazy value classes
Fix locking bugs in preference snapshot caching
Replace custom cache locks with memoized suppliers

Several data processing classes used custom cache locks.  This uses
Suppliers.memoize instead.
Remove unused ExecHelpers class
Enable Groovy globally for tests
Implement the new TaskGroup (#451)

- Add TaskGroup
- Test TaskGroup
- Deprecate TaskGroupRunner
Make train-test eval job use TaskGroup (#426)

- Use TaskGroup to run train-test eval tasks
- Make TrainTestEvalJob implement Callable to clean up exceptions
- Delete TrainTestJobException
Remove obsolete task group runner
Update release notes for #451 & #426
Merge pull request #450 from grouplens/feature/elehack-class-loader

Use custom object input stream to deserialize
build on Java 8