fix coverage metric aggregation
Fix aggregation with no predictions (#401)

- Add userRow() and finalRow() convenience methods to help
  build user/final result rows more easily
- Return null/NA when no users are scored in a metric

Conflicts:
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/predict/EntropyPredictMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/predict/HLUtilityPredictMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/predict/MAEPredictMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/predict/NDCGPredictMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/predict/RMSEPredictMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/topn/NDCGTopNMetric.java
	lenskit-eval/src/main/java/org/grouplens/lenskit/eval/metrics/topn/TopNLengthMetric.java
Refactor TestUser to simplify data routing

- Make TestUser an interface
- Implement LenskitTestUser directly against the recommender
- Remove need for suppliers of rating/prediction data
Cache prefetching DAOs in AbstractDataSource
Implement item selectors (#388)
Support metric-configurable recommendation (#388)

This allows metrics to configure number, candidates, and excludes of recommendations.
Implement nDCG Top-N metric (#388)
Expose the recommender from the test user
Cache recommendations in the test user
Add Top-N actual length metric (#388)
Return null from TestUser instead of throwing
Fix train-test NPE in no-predict situations
Detect unsupported operations in metrics
Truncate ideal list in Top-N nDCG