[WIP] API/CLN: Refactor DataFrame.append
This is a WIP pull request, there are still a bunch of things to do. I'm posting it here so you can give me early feedback or point me in an direction if something is not looking good.

*PR will be split into multiple smaller ones, as suggested*

### How it is

DataFrame.append method is pretty confusing as it is right now. There are multiple codeways according to different input types (dict/Series/DataFrame or list of these) and the results are undefined in lots of edge cases.

### Objective

This PR aims to make the code a bit cleaner and define the behavior for `append` better. For example, the input type should not interfere with the result (i.e. whether `other` is a DataFrame, Series, etc.)

Also, I wanted to make changes to the behavior of `concat` easier. `append` moves its heavy-load to `concat` and, the way it was before, it was hard to understand what was expected from `concat`. Now it's a bit easier.

### Behavior changes

(there might be some things I forgot)

- Accepted inputs for `other` are now exactly `dict`, `Series`, `DataFrame` or a list of any of those. Empty lists are also accepted. Wrong input types produce a `TypeError`

- The behavior for each type of input now is exactly the same for equivalent inputs.

- Empty columns and empty indexes will not be used when calculating the result dtypes. This is something I will think a bit about still, if you have any early suggestions, it will help.

- DataFrames containing any types of columns can be appended now. In contrast, `IntervalIndex`, `PeriodIndex` and `MultiIndex` raised errors before.

- `sort=False` will never sort the resulting columns. `append` used to sort them in some cases.

- ~~`sort=True` will raise a TypeError when the resulting columns cannot be sorted~~ (it may be better to just issue a RuntimeWarning)

- An `InvalidIndexError` will be raised if there are duplicates in the columns indexes and all indexes ~~are not the same (id)~~ do no share the same values (will raise an issue to discuss this)

### Task list (not in order)

- [x] Implement sort=None + regression tests
- [ ] Behavior when sort is not possible (warn (?))
- [ ] Move towards deprecating sort=None
- [x] Behavior for empty indexes
- [ ] Some test cases
- [ ] Check/Improve performance
- [ ] Beautiful PR
- [ ] Write Docs
- [ ] What's new
- [ ] Related issues