API: unclear what integer level name references: name or position?
I assumed that in eg `get_level_values`, `stack`, `unstack`, ... (which all boil down to the behaviour of `_get_level_number`) using an integer to specify the level, would always mean positional because we have no way to disambiguate between position or name in those cases. 

But, this seems very inconsistent:

```
In [40]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[1, 1, 2])

In [41]: mi._get_level_number(0)     # <--- positional
Out[41]: 0

In [43]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[43]: 1

In [44]: mi._get_level_number(2)     # <--- positional / name is the same
Out[44]: 2

In [45]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[2, 1, 0])

In [46]: mi._get_level_number(0)     # <--- name
Out[46]: 2

In [47]: mi._get_level_number(2)     # <--- name
Out[47]: 0

In [48]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[2, 1, 1])

In [49]: mi._get_level_number(2)     # <--- name
Out[49]: 0

In [50]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[50]: 1

In [51]: mi._get_level_number(0)     # <--- positional
Out[51]: 0

In [52]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[1, 0, 1])

In [53]: mi._get_level_number(1)     # <--- positional (as name should raise an error given duplicates)
Out[53]: 1

In [54]: mi._get_level_number(0)     # <--- name
Out[54]: 1

In [55]: mi = pd.MultiIndex.from_product([[0, 1], [2, 3], [4, 5]], names=[0, 0, 1])

In [56]: mi._get_level_number(0)     # <--- positional (as name should raise an error given duplicates)
Out[56]: 0

In [57]: mi._get_level_number(1)     # <--- name
Out[57]: 2

In [58]: mi._get_level_number(2)     # <--- positional
```


Am I missing something? Was this discussed before?

cc @toobaz
