Remove variables related to subsampling training data from Transform, move them
to a new transform called DownsampleTraining, and perform subsampling in that
transform, rather than as part of IndependentTransform (which depended on the
subsampling variables in Transform).
The prior approach was incompatible with using explicit class variable names,
rather than assuming a fixed label variable. This is because the actual
downsampling was carried out as part of IndependentTransform, which is not a
visible part of the algorithm grammar. Removing this logic from
Independent/Transform is generally desirable if only to avoid cluttering
Transform with member variables that are only used some of the time, and used
in a (fairly) restrictive way.
The current approach of makring DownsampleTraining as an indepent transform
is still limited since the downsample logic (still) cannot be applied without
the split used in Independent, and also DownsampleTraining can only be
implemented as a wrapper for another transform (because the argument to train
is const, and performing the donwsample logic in project would also impact the
testing case (since we have no way to exclude a transform used in training from
use in testing, for a fixed algorithm)).