Allow deprecate_kwarg to transform arguments

This PR is inspired by #7963, which wants to change the `infer_dst=True` kwarg to `tz_localize` to `ambiguous='infer'`.

There are several design questions raised by this change:
    - Should this be EAFP?  I suspect not because both `x[y]` and `x(y)` can raise `TypeError` based on the type of either `x` or `y`.
    - Should we test for a `get` method, or is `__getitem__` a better choice? Or should we test for instances of `collections.abc.Mapping`?
    - Is this the optimal default behavior when `old_arg_name` is not found in `mapping`?