Multithreading cleanups

Several code cleanups, primarily related to multithreading:

- Review double-checked locking use
- Replace many custom locks with `Suppliers.memoize` from Guava
- Enable Groovy for tests across all of LensKit
- Implement new `TaskGroup` design (#451)
- Use new task groups to execute eval tasks using `MoreExecutors.sameThreadExecutor()`
- Remove unused classes