CLN: Improve setting of resample deprecation warnings' stacklevel
- [N/A] closes #xxxx (see https://github.com/pandas-dev/pandas/pull/36369#issuecomment-698763910)
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [N/A] whatsnew entry

The essence of the problem is that the tests for deprecated resample kwargs require that the warning is raised exactly where the user called the resample functionality—i.e. with the appropriate `stacklevel`— (I guess so that the warning message is more user-friendly?), but there are multiple entry points that use these deprecated parameters, so this can't be easily solved by just adjusting the stacklevel by a constant amount.

The old solution was to centralize the management of these warnings in the greatest-common-denominator call site (which was `Grouper.__new__`) and "guess" the correct value of `stacklevel` by relying on the current call graph (and hoping it never changes). This of course is poorly maintainable. (For a more detailed explanation of what is wrong with this, see https://github.com/pandas-dev/pandas/pull/36369#issuecomment-694808777.)

The essence of my proposed solution (this PR) is to add a call to the deprecated-parameter-checking code to each of these entry points—this allows instead to use a constant `stacklevel` value (2) in each of these. Now since some of these public call sites appear in the call graph of others, we have to ensure this code is only called once within any call path starting at any of these entry points. This is what the `call_once` context manager takes care of.