### Summary

Add preflight checks to `lib/ansible/cli/__init__.py` for both the local locale and the fsencoding to ensure they are `UTF-8`, and abort when they are not.

We implicitly require this now, but have never strictly enforced it. Due to using `pathlib` in more places, to avoid undefined behavior in our codebase, due to the utf-8 expectation, check this early and fail fast.

### Issue Type

Feature Idea

### Component Name
```
lib/ansible/cli/__init__.py
```
### Additional Information

We may also need to evaluate the `C` locale.  I know some users are running ansible from devices with only the `C` locale.

### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
"""Function that utilizes ``wcswidth`` or ``wcwidth`` to determine the
    number of columns used to display a text string.
    We try first with ``wcswidth``, and fallback to iterating each
    character and using wcwidth individually, falling back to a value of 0
    for non-printable wide characters
    On Py2, this depends on ``locale.setlocale(locale.LC_ALL, '')``,
    that in the case of Ansible is done in ``bin/ansible``
    """
    if not isinstance(text, text_type):
        raise TypeError('get_text_width requires text, not %s' % type(text))
    if _LOCALE_INITIALIZATION_ERR:
        Display().warning(
            'An error occurred while calling ansible.utils.display.initialize_locale '
            '(%s). This may result in incorrectly calculated text widths that can '
            'cause Display to print incorrect line lengths' % _LOCALE_INITIALIZATION_ERR
        )
    elif not _LOCALE_INITIALIZED:
        Display().warning(
            'ansible.utils.display.initialize_locale has not been called, '
            'this may result in incorrectly calculated text widths that can '
            'cause Display to print incorrect line lengths'
        )
    try:
        width = _LIBC.wcswidth(text, _MAX_INT)
    except ctypes.ArgumentError:
        width = -1
    if width != -1:
        return width