### Summary

Add preflight checks to `lib/ansible/cli/__init__.py` to ensure that `stdin`, `stdout`, and `stderr` are blocking, and not non-blocking.  The `Display` class cannot handle the non-blocking case, and it's been decided to not attempt work arounds to allow this.

We've experienced this happening in subprocesses where something like `ssh` sets these FDs as non-blocking and doesn't restore them to blocking, causing tracebacks.

### Issue Type

Feature Idea

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

<!--- Paste example playbooks or commands between quotes below -->
```yaml (paste below)

```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
''' code behind bin/ansible* programs '''
    PAGER = 'less'
    
    
    LESS_OPTS = 'FRSX'
    SKIP_INVENTORY_DEFAULTS = False
    def __init__(self, args, callback=None):
        """
        Base init method for all command line programs
        """
        if not args:
            raise ValueError('A non-empty list for args is required')
        self.args = args
        self.parser = None
        self.callback = callback
        if C.DEVEL_WARNING and __version__.endswith('dev0'):
            display.warning(
                'You are running the development version of Ansible. You should only run Ansible from "devel" if '
                'you are modifying the Ansible engine, or trying out features under development. This is a rapidly '
                'changing source of code and can become unstable at any point.'
            )
    @abstractmethod
    def run(self):