PERF: use labels to find duplicates in multi-index
```
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------
multiindex_duplicated                        | 139.2883 | 469.6666 |   0.2966 |
-------------------------------------------------------------------------------
Test name                                    | head[ms] | base[ms] |  ratio   |
-------------------------------------------------------------------------------

Ratio < 1.0 means the target commit is faster then the baseline.
Seed used: 1234

Target [2b99b80] : use labels to identify duplicates in multi-index
Base   [0fe43a6] : Merge pull request #9120 from minrk/nbviewer-link

fix an nbviewer link in tutorials
```

this on top of  #9061 ?
 [`get_flat_ids`](https://github.com/pydata/pandas/pull/9061/files#diff-720d374f1a709d0075a1f0a02445cd65R3514) is copy pasted from https://github.com/pydata/pandas/pull/9061. `MultiIndex.is_unique` has been re-factored.
 ok, #9061 merged, so pls rebase this
 pls add a release note as well
 rebased and added release note. travis build all green.
 @jreback actually i think it is better to have [`duplicated`](https://github.com/pydata/pandas/pull/9125/files#diff-584ad9f2559ff5ffb39ee605b3a20513R541) as a separate function as opposed to class method. so plz do not merge, and let me change the code.
 @behzadnouri no prob. lmk
 @jreback this is done!
 merged via https://github.com/pydata/pandas/commit/8f4a3213ff352ce6e379ec654a53a0de5adb7d23 thanks!
