tracking down memory allocations
move SplitImpurity back to accepting pointers for slight performance gain