Introduce a separate train method that models the inputs of separate project calls as separate list items

This is what I was talking about regarding the issue with project/train discreptancies involving the presence/absence of distribute as a parent of pipe transforms. The basic idea is to call project(QList<TemplateList>) on interior transforms like distribute or pipe, and use that structure to convey the separate calls that would be made to distribute. For transforms that actually need training, project(TemplateList) still works by automatically combining the input QList<TemplateList> to a single TemplateList.

I'm not sure, but I strongly suspect this breaks training cross-validation, so it may not be appropriate to merge as-is.