BUG: Return KeyError for invalid string key
- [x] closes #22803
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

In principle, it is nice to raise different errors if the string is invalid, or if the resulting period is missing. However, we want, and need, methods such as ``.loc`` to return errors of predictable types.
And indeed, this is how ``PeriodIndex``, for instance, works:

``` python
In [2]: pd.date_range('2010-10-10', '2010-10-11').get_loc('pippo')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
```
[...]
``` python
/home/nobackup/repo/pandas/pandas/core/indexes/datetimes.py in get_loc(self, key, method, tolerance)
   1019                 if 'list-like' in str(e):
   1020                     raise e
-> 1021                 raise KeyError(key)
   1022 
   1023     def _maybe_cast_slice_bound(self, label, side, kind):

KeyError: 'pippo'

```