Selection by labels with non-transitive equality
#### Code Sample, a copy-pastable example if possible

```python
import pandas as pd


class KV(object):

  def __init__(self, key, val):
    self.key = key
    self.val = val

  def __str__(self):
    return 'KV({!r}:{!r})'.format(self.key, self.val)

  def __hash__(self):
    return hash(self.key)

  def __eq__(self, other):
    if isinstance(other, basestring):
      return self.key == other
    elif isinstance(other, KV):
      return self.key == other.key and self.val == other.val
    return NotImplemented

  def __ne__(self, other):
    equals = self == other
    if equals is NotImplemented:
      return NotImplemented
    return not equals

  def __lt__(self, other):
    if isinstance(other, basestring):
      return self.key < other
    return NotImplemented

  def __le__(self, other):
    if isinstance(other, basestring):
      return self.key <= other
    return NotImplemented

  def __gt__(self, other):
    if isinstance(other, basestring):
      return self.key > other
    return NotImplemented

  def __ge__(self, other):
    if isinstance(other, basestring):
      return self.key >= other
    return NotImplemented


# labels with transitive equality
idx = pd.Index(['a', 'a'])

assert idx.get_loc('a') == slice(0, 2) # string selects both values
assert (idx == 'a').tolist() == [True, True]  # string selects both values

# labels with non-transitive equality
a1 = KV('a', 1)
a2 = KV('a', 2)

assert a1 == 'a' # KV and string match on key
assert a2 == 'a' # KV and string match on key
assert a1 != a2 # KV and KV match on key, but not on value

idx = pd.Index([a1, a2])

assert idx.get_loc('a') == 0 # string selects first KV
assert (idx == 'a').tolist() == [True, True]  # string selects both KVs
```
#### Problem description

Selection by labels with non-transitive equality has inconsistent behavior with duplicate labels. I would expect duplicate labels to be selected in all cases.

#### Expected Output

```python
assert idx.get_loc('a') == slice(0, 2) # string selects both KVs
```

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.6.final.0
python-bits: 64
OS: Linux
OS-release: 3.13.0-96-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: None.None

pandas: 0.20.3
pytest: 3.1.3
pip: 9.0.1
setuptools: 36.2.0
Cython: 0.26
numpy: 1.13.1
scipy: 0.19.1
xarray: None
IPython: 5.4.1
sphinx: 1.6.3
patsy: 0.4.1
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.2
feather: None
matplotlib: 2.0.2
openpyxl: None
xlrd: None
xlwt: 0.7.5
xlsxwriter: None
lxml: None
bs4: None
html5lib: 0.999
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
pandas_gbq: None
pandas_datareader: None

</details>
