BUG: Bug in DataFrame.replace with a datetime64[ns, tz] and a non-compat to_replace #11326
closes #11326
xref #11153 

@sinhrks I ended up rewriting replace/fillna quite a bit to make much more generic. as lots of duplicated code in #11153 

This simplifies quite a bit.

lmk if you have comments.
