BUG: dtype lost in DataFrame.append
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [ ] whatsnew entry

1) For BlockManager, this improves dtype-retention, see test_append_same_columns_type
2) For ArrayManager, this fixes an unwanted casting to object, see test_append_empty_frame_to_series_with_dateutil_tz
3) I'm increasingly confident that with this, we can get rid of several kludges in internals.concat
4) This does change the order of columns in some cases, see test_append_empty_frame_to_series_with_dateutil_tz.  AFAICT this is due to a bug in union_indexes (but fixing it breaks other things that i need to run down), xref #43375