BUG(?) Missing-values in RandomForest only during inference time shouldn't send missing-values to the child with most samples

Currently, when missing-values occur only in the testing dataset for constructing a RandomForest, there is a policy that the missing values are sent to the child with the most samples. This amounts to in some sense imputing the missing-value data using the data in the child with the most samples. An issue here is that this may bias the tree prediction towards say a class in the training dataset with more samples. 

For example, say there are 1000 training samples of class 1 and 10 training samples of class 0, and then during test time there are some NaNs. The predictions would then bias towards class 1, whereas it should really be uninformative because the NaNs during test time are treated as missing completely at random.

## Proposed Solution

However, an alternative and more sensible strategy is that when NaNs are not enountered during training, but show up in testing data, they should just be sent stochastically down the tree using weights:

- `p_left_child = n_left_samples / (n_left_samples + n_right_samples)`
- `p_right_child = n_right_samples / (n_left_samples + n_right_samples)`

This ensures that there is no bias towards the class "with more samples". This can be implemented by allowing the value of `missing_go_to_left` (https://github.com/scikit-learn/scikit-learn/blob/6bf0ba5257d55ea0f3c89d7c4762096d84c052cc/sklearn/tree/_splitter.pxd#L28) to be `2`. If the value is `2`, it implies that missing-values were not observed during training time, and thus should be stochastically set.

Overall, it's a very simple change, and I can also implement relevant unit-tests.

cc: @thomasjpfan who implemented the original missing-value support in RandomForest.

## Related
xref: This policy will also impact #27966 and #28268 

This is also an issue in other estimators that handle NaNs: https://scikit-learn.org/stable/modules/ensemble.html#missing-values-support

COMMENT:
Responding to @glemaitre 

> In terms of an application use case, I'm also wondering if we should not error/warn if a user starts to provide missing values at test time while we did not see any during training. @adam2392 do you have a legitimate use case where this is kind of normal.

and @NicolasHug 

> There's no right or wrong strategy here I believe but we should note that the strategy suggested above means that `predict(X)` called twice on the same `X` may lead to different predictions. Do we have other predictors in scikit-learn that are inherently random (excluding tie-breaking etc.)?

I've thought about it a bit more. I think rn it is the right strategy only if missing-values occurred Missing-At-Random (MAR). If the missing-values during test time occurred Missing-Completely-At-Random (MCAR), in fact this is the wrong strategy and a very wrong one.

MAR assumes there is missing-ness dependent on groups in the observed data. In this case, if missing-values solely occurred dependent on covariates in the observed data, then it seems sensible (tho I could be missing additional nuances) to send down the branch w/ the most samples.

However, MCAR assumes missing-ness is completely random in the observed test dataset. If all of a sudden missing-values occurred within the test sample, then this is a pretty reasonable assumption. Consider for example, you spend a lot of time collecting clean training data, and then release. Missing values come in at random due to just instrument noise tho at test time because you're not in an experimental setup anymore. Therefore, missing-values should not influence the predictions even at test time.

This in fact is probably not an edge case, and is definitely plausible in a lot of other use-cases. I suspect ppl do hacks to get around it ofc like imputing the data, and such. However, you already have the tree structure, which should and can be leveraged.

**Hypothesis:** If we generate training/testing data from the same population data generating model, and then induce missingness on the test set completely at random, we will see biased predictions and posterior probabilities.

Labels: Needs Investigation