ENH: Use find_stack_level universally
It can be difficult to determine where warnings are coming from in user code when the stacklevel used points to pandas internals. There were recent improvements (~6 months ago) to find_stack_level. Doing some time tests, I get the following results on my machine:

 - Depth of 3: 0.149ms
 - Depth of 100: 1.48ms

<details>
<summary>Timing code</summary>

```
    # Added as a method of DataFrame
    def foo(self, depth, runs):
        if depth > 0:
            self.foo(depth-1, runs)
        else:
            import time
            from pandas.util._exceptions import find_stack_level

            timer = time.time()
            for _ in range(runs):
                find_stack_level()
            print(f'Average runtime: {(time.time() - timer) / runs : 0.10f}')

pd.DataFrame().foo(depth=100, runs=1000)
```

</details>

Is this reliable/performant enough to use universally in all warnings so that the stacklevel is always correct?