[CLN] Dispatch (some) Frame ops to Series, avoiding _data.eval
ATM there are exactly two places where `BlockManager.eval` is called: `DataFrame._combine_match_columns` and `DataFrame._combine_const`.  This replaces the usage in `_combine_match_columns` with a dispatch-to-Series implementation.  Some output dtypes get changed (see edits in `test_axis_select_reindex`, `test_pivot`), and some errors get changed from `ValueError` to `TypeError` (see `test_operators`).

The other usage of `_data.eval` will be removed separately; that turns out to be a lot more trouble because a bunch of `DataFrame` behavior is currently incorrect (see #22017).

This PR also:
- Simplifies some of the special-casing in SparseDataFrame; trying to move towards not having separate implementations for these methods
- Dispatches `_combine_match_index` to avoid calling `self.values` when doing so would require coercing to object-dtype.