moved data structures (Stack + Heap) to _utils
use impurity_improvement for choosing best split