ENH: Styler tooltips feature
- [x] closes #21266 
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

This is a draft PR to address 21266: Tooltips for DataFrames in Styler.

This PR has the following objectives:

1) Add functionality whilst being completely (almost) decoupled from the rest of the HTML rendering process
2) Be fully backwards compatible and have no impact at all on previous Styler's that have never used tooltips.
3) Use pseudo CSS class rendering via `table_styles` to control the visualisation of the tooltips.

To address 1) the architecture was simple:

- If `tooltips` are detected then an additional HTML element is added to every data cell: `<span class="pd-t"></span>`. If `tooltips` are not detected (by default) nothing is done.
- Add generic table level CSS for the tooltip class, hiding tooltips by default but positioning, sizing, and coloring them.
- Loop through a tooltips DataFrame and based on the row and col index add additional content to the <span> element using the ::after pseudo-element targeting the exact cell id. This is table level also. Rendering is performed as the last step.

To address 2) default values ensure the functions make no changes unless `set_tooltips` has been called.

## Extensions

The very simple architecture requires a DataFrame of tooltips to be supplied. This requires the user to have constructed it privately (possibly using the regular DataFrame.apply and DataFrame.applymap) methods. These could be incorporated.

It would also be better to only add extra HTML <span> elements to data cells that have tooltips. This requires conditional looping of the render dict, which I haven't included here to save on initial complexity. For small dataframes it is also irrelevant.

However, given my time constraints I would rather leave this to a more available and more competent developer!!

Comments welcome..
