ENH: set render limits on `Styler` to automatically trim dataframes
- [x] closes #40712  also linking #11700
- [x] tests added / passed

Adds an option: `styler.max.elements` with a default value of 2**18 = 262144.

```
>>> pd.options.styler.max.elements = 2**18
>>> df = pd.DataFrame(np.random.rand(10000,100))
>>> %timeit df.style.render()
4.11 s ± 30.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
```
Even though this is a *'large'* dataframe it is reduced to the max elements and still renders in reasonable time (4s plus about 5s for a browser to render the date).

If the number of data elements exceeds the max then the right side, or bottom, or both of the DataFrame will be trimmed (starting with the largest axis and recursively reducing), leaving '...' filler indicators.

All reduction takes place before index or data looping so it avoids any crashes.

![Screen Shot 2021-05-23 at 20 44 15](https://user-images.githubusercontent.com/24256554/119274105-975dc100-bc0e-11eb-9ac4-8df45ceb0d0d.png)




thanks @attack68 