REF: re-use tz_convert_from_utc_single in _localize_tso
Largely sits on top of #46516 

The observation is that what _localize_tso is doing is similar to what tz_convert_from_utc_single is doing if we could just get a couple more pieces of information back from the latter call.   Getting `fold` back is easy to do by passing via pointer (which we do elsewhere).  Getting `new_tz` back is uglier but its the best we got.  (im assuming that returning a tuple`(int64_t, bint, Py_ssize_t)` would incur a perf penalty but ive bothered the cython folks enough already recently)

May be able to get some extra de-duplication in _create_tsobject_tz_using_offset and/or ints_to_pydatetime.  But I'm skittish perf-wise.

#46516 should definitely be merged.  This I won't be offended if reviewers ask for %timeits out the wazoo.

At some point, someone with just the right amount of adderall drip should figure out the optimal way to check for `typ=="dateutil" etc.
rebased? > rebased?

has been rebased following #46516, im not aware of anything relevant since then https://dev.azure.com/pandas-dev/pandas/_build/results?buildId=75951&view=logs&j=915dbb23-6529-54ae-059d-ec0b59ba10e8&t=86b091c2-17fe-52fe-2454-5f56a371e155

32-bit failures :-< looks like those were xpasses, should now be unfixed green