[BUG]: Fix ValueError in concat() when at least one Index has duplicates
- [x] closes #36263
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

If obj_labes Index has duplicates and they are not removed from new_labels before redindexing, they are multiplied. So we would get a way too big index.
also pls merge master @jreback merged master Moved it to algorithms and added a benchmark. I looked through indexing and the with index associated modules but could not find anything, which would help here. The check for uniqueness is not necessary from a technical standpoint, but it should save some time for unique indices. This pull request is stale because it has been open for thirty days with no activity. Please update or respond to this comment if you're still interested in working on this. @phofl can you resolve merge conflicts Done Example:

We have the 2 DataFrames
```
df1 = DataFrame([1, 2, 3, 4], index=[0, 1, 1, 4], columns=["a"])
df2 = DataFrame([6, 7, 8, 9], index=[0, 0, 1, 3], columns=["b"])
```

When looping over ``df1`` (df2 case is similar)
In this case ``new_labels`` before calling ``make_duplicates_of_left_unique_in_right`` will be
```
new_labels=Index([0, 0, 1, 1, 3, 4])
```

while ``obj_labels`` will be
```
obj_labels=Index([0, 1, 1, 4])
```

Simply reindexing would return an indexer which would duplicate the pair ``[1, 1]`` again: ``np.array([0, 0, 1, 2, 1, 2, -1, 3])``. (taking every ``1`` twice)
The new function takes the duplications of the 1 in ``new_labels`` away.

``make_duplicates_of_left_unique_in_right`` returns 
```
new_labels=Index([0, 0, 1, 3, 4])
```

which leads us to the desired reindexing result ``np.array([0, 0, 1, 2, -1, 3])`` Removed the test_concat file, probably got in through merging master the last time thanks @phofl very nice Thx, will try to use this for the Index.union with duplicates problems reverted here: https://github.com/pandas-dev/pandas/pull/38654