ENH faster heapsort in trees

Uses the heapsort version that I'm familiar with: linear-time heapify
followed by n delete-min operations. Also cache-friendlier by copying
active features into a temporary array.

Random forest training time on covertype:
now     34.4123s
before  60.1179s
ENH introsort in tree learner

Covertype w/ random forest training time down to 29.0857s.
ENH Make PresortBestSplitter cache friendly + cosmetics
Merge pull request #2747 from larsmans/tree-sort

[MRG] faster sorting in trees; random forests almost 2× as fast