major refactor - abstract away cross-validation logic into separate class and clean up algorithm classes