TST: loc misbehaves when Period is at start of 3-level MultiIndex
If index is MultiIndex and level of 0 is PeriodIndex, loc function raise
exception if all input of loc does not match index values

Background: This bug only happens when MultiIndex's level is 3 and first level index is PeriodIndex. In this situation, if someone access one row using a '.loc' with a miss match key, then would not raise exception.

Someone already change what i try to do `parse_time_string` function in '_libs.tslibs.parsing'.
in the past,
```
def parse_time_string(arg, freq=None, dayfirst=None, yearfirst=None):
    if not isinstance(arg, str):
        return arg
```

What i try to do:

```
def parse_time_string(arg, freq=None, dayfirst=None, yearfirst=None):
    if not isinstance(arg, str):
        raise TypeError
```

now in master:
```
def parse_time_string(arg, freq=None, dayfirst=None, yearfirst=None):
    if not isinstance(arg, str):
        raise TypeError("parse_time_string argument must be str")
```
Just add tests for issue. 

- [x] closes (#20684)
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

Can you add tests specific to parse_time_string.  That would go in tests.tslibs.test_parsing @jbrockmendel ping? can you also make sure we have tests for the entire example in the OP (IOW the working cases as well) @jreback  could you also check #29038 ? thanks @proost  @jbrockmendel  @jreback 
Thank you for your feedback.