REF: avoid object-dtype casting in Block.replace
ATM we do `self.astype(object)`, where the idiomatic thing to do is `self.coerce_to_target_dtype(value)`, which in some cases means we dont need to cast on the back-end
is this user visible? if so can you add a whatsnew note, otherwise lgtm. > is this user visible?

no, just more idiomatic