[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.
Okay, I had drafted

```
    SIZE_t pos             # Count of samples for feature < threshold.
                           # Set to >= end if the node is a leaf
    SIZE_t feature         # Which feature to split on.
    double threshold       # Threshold to split on.
    double improvement     # Decrease in impurity caused by the split.
    double impurity_left   # 
    double impurity_right
```