Add option to fit tree with print statements
Add more optional prints in make_subtree()
Fix: mid-point of numeric features cast to float
Fix: criteria to be a numeric split candidate

Previously we used the symmetric difference between two sets of labels to judge
whether the two partitions should produce a split candidate. For example, two
sets of labels [True, False] and [False] have a symmetry difference (True). But
breaks down with two sets of labels [True, False] and [True, False]. There's no
symmetric difference but we still want a split candidate there.

Now we express the criteria more primitively, there's NO candidate if the sets
are equal and the length of the label set is one. This only happens (for binary
labeling), for:
[True], [True] or
[False], [False]

All other cases warrant a split candidate.
Test determine_numeric_split_candidates()