REF: Rework core.dtypes.cast.maybe_promote
#### Problem description

[xref #18313](https://github.com/pandas-dev/pandas/pull/18313#issuecomment-345540449)

> note if you are interested in cleaning some things up :>
>
> maybe_promote I think will pretty much ignore its fill value for almost all dtypes. So the question is, when is it not ignored, can we safely remove it (or really just make the default fill_value=None, and then when its not None actually do something.
>
> Not sure of the answer here.