added ID3::with_label and cleaned up local state inside ID3::train