Add helpful error message to get_loc
#### Code Sample, a copy-pastable example if possible

```python
df = pd.DataFrame({'time':[1, 1.5, 2], 'data':[5, 7, 9]})
df = df.set_index('time')
idx = df.index.get_loc(1.75)
```
#### Problem description

The error message for the code above is cumbersome and does not give a hint to new users what the problem is:
<details>
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3077             try:
-> 3078                 return self._engine.get_loc(key)
   3079             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Float64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Float64HashTable.get_item()

KeyError: 1.75

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-136-0d357b65fb38> in <module>
      1 df = pd.DataFrame({'time':[1, 1.5, 2, 2.5, 3], 'data':[5, 7, 9, 11, 13]})
      2 df = df.set_index('time')
----> 3 idx = df.index.get_loc(1.75)

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/numeric.py in get_loc(self, key, method, tolerance)
    417             pass
    418         return super(Float64Index, self).get_loc(key, method=method,
--> 419                                                  tolerance=tolerance)
    420 
    421     @cache_readonly

~/anaconda3/lib/python3.7/site-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
   3078                 return self._engine.get_loc(key)
   3079             except KeyError:
-> 3080                 return self._engine.get_loc(self._maybe_cast_indexer(key))
   3081 
   3082         indexer = self.get_indexer([key], method=method, tolerance=tolerance)

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Float64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Float64HashTable.get_item()

KeyError: 1.75
</details>

#### Expected Output

Instead of the 48 lines of traceback log and a raw KeyError, the line "*Value was not found in index. To match the closest value, use the parameter method='nearest'*" would be significantly more helpful. 

Is there a guideline on messages like this for common user errors? Would a PR to make [this line](https://github.com/pandas-dev/pandas/blob/6a8e7087831193afbc3e1799460614506743077b/pandas/core/indexes/base.py#L2664) verbose be welcome?

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

<details>

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

pandas: 0.23.4
pytest: 4.0.2
pip: 18.1
setuptools: 40.6.3
Cython: 0.29.2
numpy: 1.15.4
scipy: 1.1.0
pyarrow: None
xarray: None
IPython: 7.2.0
sphinx: 1.8.2
patsy: 0.5.1
dateutil: 2.7.5
pytz: 2018.7
blosc: None
bottleneck: 1.2.1
tables: 3.4.4
numexpr: 2.6.8
feather: None
matplotlib: 3.0.2
openpyxl: 2.5.12
xlrd: 1.2.0
xlwt: 1.3.0
xlsxwriter: 1.1.2
lxml: 4.2.5
bs4: 4.6.3
html5lib: 1.0.1
sqlalchemy: 1.2.15
pymysql: None
psycopg2: None
jinja2: 2.10
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None

</details>
