REF: Make concat not stateful.
All the logic used to be held in a `_Concatenator` class. The statefullness wasn't really needed since `concat` is a one-shot method so broke it out into its functions
```bash
| Change   | Before [039edee0] <main>   | After [0becd77e] <ref/concat>   |   Ratio | Benchmark (Parameter)                                                                |
|----------|----------------------------|---------------------------------|---------|--------------------------------------------------------------------------------------|
| -        | 46.8±4μs                   | 41.8±0.1μs                      |    0.89 | join_merge.ConcatIndexDtype.time_concat_series('string[pyarrow]', 'has_na', 0, True) |

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE INCREASED.
``` Since test are passing, going to merge. Happy to follow up if needed Hey, just a note that this has [broken](https://github.com/geopandas/geopandas/actions/runs/9817406953/job/27108741741) concat override in geopandas, where we're now hitting `'object' object has no attribute 'objs'`. Just wanted to clarify if that is expected or just an unwanted consequence of refactoring (i.e. whether I should fix it on geopandas side). It was an intended consequence of the refactor given that `concat` isn't stateful anymore. I think I can come up with a fix that will make this non-breaking for geopandas

To confirm it appears that geopandas overrides `__finalize__`? Just curious the reason for that > To confirm it appears that geopandas overrides __finalize__? Just curious the reason for that

To ensure that we can correctly propagate custom metadata. That used to be an information about projection and an active geometry column, right now it is only active geometry column. Without that, the resulting GeoDataFrame would lose the track of active geometry and require manual re-assignment of active geometry.