Avoid copying unused columns from data-set
Instead of changing the whole dataframe into numpy array (per group), we should only access those columns that are required for the iterator, i.e. features, (optional targets), (optional sort_id).
Also adds type-hints and various documentation