Disallow non-scalar fill_value in maybe_upcast
Along with #29331 and #29332 this allows us to rule out non-scalar fill_value being passed to maybe_promote for _almost_ all cases, the last few of which we'll have to address individually.

The restriction in `Block.shift` could be an API change if you squint and tilt your head.

The assertion in masked_rec_array_to_mgr is based on my read of the numpy docs, but it'd be worth double-checking.
this is orthogonal to #29331 ? > this is orthogonal to #29331 ?

correct

> do we need additional tests here?

for maybe_upcast_putmask i dont think so.  for Block.shift maybe; im still a little iffy on the object-dtype case there thanks, pls followon tests as needed