Fix unrecognized 'Z' UTC designator

closes #8771 
The parser in np_datetime_strings.c checks Z is followed by end of string and raises otherwise. In tslib.pyx, function convert_ts_tsobject(), any ValueError is catched and then the fallback external parser is called:
```python
 if util.is_string_object(ts):
        if ts in _nat_strings:
            ts = NaT
        else:
            try:
                _string_to_dts(ts, &obj.dts, &out_local, &out_tzoffset)
                obj.value = pandas_datetimestruct_to_datetime(PANDAS_FR_ns, &obj.dts)
                _check_dts_bounds(&obj.dts)
                if out_local == 1:
                    obj.tzinfo = pytz.FixedOffset(out_tzoffset)
                    obj.value = tz_convert_single(obj.value, obj.tzinfo, 'UTC')
                    if tz is None:
                        _check_dts_bounds(&obj.dts)
                        return obj
                    else:
                        # Keep the converter same as PyDateTime's
                        ts = Timestamp(obj.value, tz=obj.tzinfo)
                else:
                    ts = obj.value
                    if tz is not None:
                        # shift for _localize_tso
                        ts = tz_convert_single(ts, tz, 'UTC')
            except ValueError:
                try:
                    ts = parse_datetime_string(ts)
                except Exception:
                    raise ValueError
``` 
So I am not sure how to handle the 2 cases discussed without changing the current mechanism?