TST: Fix xfails for non-box maybe_promote on integer dtypes
Orthogonal to other outstanding maybe_promote PRs.

This one required pretty significant changes to the code.  Using `np.min_scalar_type` and `np.can_cast` cleans this up a bit, but it is still pretty verbose.  AFAICT there is no clear way to make it shorter without significantly sacrificing clarity.

In a follow-up I think L410-459 can be refactored out to a helper function.  Waiting on that until I figure out the boxed=True cases, which are still troublesome.