[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.
Best and current don't apply.