ENH partial_dependece plot for HistGradientBoosting estimator fitted with `sample_weight`

### Describe the workflow you want to enable

As partial dependence of a model at a point [is defined as an expectation](https://scikit-learn.org/stable/modules/partial_dependence.html#mathematical-definition), it should respect `sample_weight` if someone wishes to use it (for instance, when you know your `X` does not follow the distribution you are interested in).

#25209 tries to solve this for `method='brute'` when you have new `X`. For older tree-based models trained with sample_weights, [`method='recursion'`](https://nicolas-hug.com/blog/pdps) keeps track of the training `sample_weight` and calculates the `partial_dependece` with that into consideration.

But, as discussed during the implementation of `sample_weight` on the HistGradientBoosting estimators (https://github.com/scikit-learn/scikit-learn/pull/14696#issuecomment-548295813), these models stores an attribute `_fitted_with_sw` and when `partial_dependece` with recursion is asked, it throws an error:

https://github.com/scikit-learn/scikit-learn/blob/205f3b76ef8500c90c346c6c6fb6f4e589368278/sklearn/ensemble/_hist_gradient_boosting/gradient_boosting.py#L1142-L1148


### Describe your proposed solution

As discussed in https://github.com/scikit-learn/scikit-learn/issues/24872#issuecomment-1352354690, the big difference between other tree-based algorithms and HistGradientBoosting is that HistGradientBoosting does not save the `weighted_n_node_samples` when building the tree.

### Describe alternatives you've considered, if relevant

_No response_

### Additional context

_No response_

COMMENT:
Hello @Andrew-Wang-IB45! If `BaseDecisionTree` uses it on its init, I would not be opposed to doing the same in `BaseHistGradientBoosting` following the same logic. Feel free to choose one, and during review time, maintainers will give their opinion.

Regarding tests, I think you can follow the logic here to see if it is doing what it is supposed to do:
```python
import pandas as pd
import numpy as np
from sklearn import __version__

print("sklearn version:", __version__)
>>> sklearn version: 1.1.3

from sklearn.datasets import make_classification
from sklearn.ensemble import HistGradientBoostingClassifier

X, y = make_classification(n_samples=1000, weights=(0.9,), random_state=42)
sample_weight = np.random.RandomState(42).exponential(scale=1 + 4*y)

hgbc = (
    HistGradientBoostingClassifier(random_state=42, max_depth=1, max_iter=1)
    .fit(X, y, sample_weight)
)

pd.DataFrame(hgbc._predictors[0][0].nodes)
```
<img width="940" alt="image" src="https://user-images.githubusercontent.com/55899543/212979935-3529d4d7-a45c-4d12-b4cf-4d70daf501d3.png">

```python
aux = pd.DataFrame(hgbc._predictors[0][0].nodes).loc[0]

feat_idx = int(aux.feature_idx)
num_tresh = aux.num_threshold

sample_weight[X[:, feat_idx] >= num_tresh].sum(), sample_weight[X[:, feat_idx] < num_tresh].sum()
>>> (456.6039224516335, 897.213567789653)
```
These numbers should be the `weighted_n_node_samples` of each leaf (note that `max_depth=1` and we have only one predictor).

Labels: New Feature, module:ensemble