[MRG] ENH/FIX Change Tree underlying data structure

* avoid segfault (#2726) by setting base on numpy arrays
* A struct array for tree nodes and values array (size indeterminate at compile time) are the only underlying structure, so each node is locally grouped memory, and joblib dumps will save only two numpy files per tree.
* `predict` uses the value array's `take` method, reducing code repetition