text: Title: [ENH] Coalesce function that doesn't delete columns
  Body: # Brief Description
  
  It seems the coalesce function must always replace all input columns with one output column. While this makes sense from the meaning of "coalesce" I can think of cases when this is not the desired outcome.
  
  For example, I have a column D that is a good default value for a few other columns and I might want to coalesce([A,D],A), coalesce([B, D], B) etc. This would break currently as D would disappear after the first coalesce
  
  In this case, I could use A.fillna(D, inplace=True) but if I have multiple default columns (e.g. I want to coalesce([A,B,D]) and coalesce([B,C,D]) then it becomes messy. Maybe there is a better way I am not aware of.
  
  I'm happy to try a PR for this but wanted to confirm that this is a reasonable thing to do.
  
  # Example API
  
  I would propose adding a delete_columns option which is defaulted to be True so existing behaviour is preserved. Or keep_columns which defaults to False.
  
  ```python
  def coalesce(
      df: pd.DataFrame,
      column_names: Union[str, Iterable[str], Any],
      new_column_name: str = None,
      delete_columns: bool = True
  ) -> pd.DataFrame:
  ...
  if delete_columns:
       df = df.drop(columns=column_names)
  ```
  It would still replace an existing column if no column name is specified or the new column already exists.