Add CrossValidation method to Evaluation.h

This branch contains a simple implementation for cross validation workflow.

This pull request has a large number of commits because its actually synchronized to master. (A pull request to master would only provide 6 commits).