[MRG] Factor out split data as struct in Tree splitters and builders

This uses a struct to store 6 C variables that get passed by tree builders into splitters, where they are duplicated for the current and best candidate. Copying `current` to `best` is now a one-liner. The refactor hence saves >300 lines of C code (or 18% of `_tree.c`!).

This changes the not-quite-public `Splitter.node_split` interface, so we may want to be conservative about it.

I originally made part of this patch as a contribution to #3173, where the code was duplicated another two times, but this version is a bit more ambitious in modifying the `node_split` interface and the tree builder, and I thought that might warrant separate review. If this interface is considered somewhat public, we might choose to include the change in 0.15 to minimise future API volatility.
Here  a suggestion

```
cdef struct SplitRecord:
     # Data to track split point 
     SIZE_t pos             # Split samples array at the given position
     SIZE_t feature         # Feature used to make the split
     double threshold       # Threshold value at the split
     double improvement     # Impurity improvement given parent node
     double impurity_left   # Impurity of the left split
     double impurity_right  # Impurity of the right split
```