Vectorized ISO Format
- [ ] closes #28180
- [ ] tests added / passed
- [ ] passes `black pandas`
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Needs work but could certainly use some guidance from @jbrockmendel 

This uses the dt -> ISO string formatting that is deeply nested in the JSON code. It doesn't handle time zones properly (see #12997), doesn't match what you would get by default from `Timestamp.isoformat` (different precision) and doesn't support Timedeltas yet. When Timedeltas are supported this could ease some of the performance issues @cbertinato is seeing in #28595

In any case looking for guidance and thoughts on how to properly implement this, if this is even in the right direction

Here's a rough benchmark on performance:

```ipython

> Is this the appropriate way to be registering the accessor method?

I think so. There are a handful of np_datetime/np_datetime_strings funcs that we only use in the ujson code.  Would this replace that usage?  i.e. as a follow-up, could we get this func out of the C code and into cython? This wouldn't replace it because this would only handle datetimelike objects when they appear in a DTA; ujson still handles these as one-off appearances in object arrays

Not sure about conversion to Cython. I think your idea to have this exposed in numpy would be ideal atm, so I'll check that route first and then maybe see if cythonizing makes sense thereafter Might revisit this after #28912