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.