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