### Summary

When using `ansible.builtin.pip`, if you wish to create a virtualenv using the `venv` module rather than one of the `virtualenv` wrapper script, the standard way to do so is `virtualenv_command: "FOO -m venv"`, where FOO is the absolute path to the Python interpreter you wish to use, e.g. `/usr/bin/python3.6`.

However, if you wrap the 'venv' module name in quotes, to protect it as a shell string literal (e.g. `virtualenv_command: "/usr/bin/python3.6 -m 'venv'"`), an error occurs.

Related: https://github.com/ansible/ansible/issues/52275

### Issue Type

Bug Report

### Component Name

ansible.builtin.pip

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.6]
  config file = None
  configured module search path = ['/home/votisupport/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/votisupport/test/venv/lib64/python3.6/site-packages/ansible
  ansible collection location = /home/votisupport/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/votisupport/test/venv/bin/ansible
  python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
  jinja version = 3.0.3
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
```


### OS / Environment

CentOS Linux release 7.9.2009 (Core)

### Steps to Reproduce

```yaml
  - name: "Demonstrate Ansible bug"

    hosts: "127.0.0.1"
    remote_user: "root"
    connection: "local"
    become: true
    become_user: "root"

    gather_facts: false

    tasks:
      - name: "Update pip in test virtualenv"
        ansible.builtin.pip:
          name:
            - "pip==21.1.2"
          virtualenv: "/test_venv"
          virtualenv_command: "/usr/bin/python3.6 -m 'venv'"
```


### Expected Results

* The value `/usr/bin/python3.6 -m venv` is treated as an executable path followed by 2 command-line arguments rather than a path which contains literal spaces in it
* One of the example values given in [the documentation for the 'virtualenv_command' parameter](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/pip_module.html#parameter-virtualenv_command) is `~/bin/virtualenv`
* Therefore the value is being passed to and parsed by a shell
* Therefore:
  a. `/usr/bin/python3.6 -m 'venv'` should be functionally identical to `/usr/bin/python3.6 -m venv`
  b. Per shell scripting best practices, 'venv' should be quoted, even though it doesn't contain any whitespace or special characters, because it is a command-line argument which can take an arbitrary string values.


### Actual Results

```console
(venv) [REDACTED@REDACTED test]$ ansible-playbook -vvvv 'playbook.yml'
[DEPRECATION WARNING]: Ansible will require Python 3.8 or newer on the controller starting with Ansible 2.12. Current version: 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]. This feature will be removed from ansible-core in version 2.12.
 Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
ansible-playbook [core 2.11.6]
  config file = None
  configured module search path = ['/home/REDACTED/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/REDACTED/test/venv/lib64/python3.6/site-packages/ansible
  ansible collection location = /home/REDACTED/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/REDACTED/test/venv/bin/ansible-playbook
  python version = 3.6.8 (default, Nov 16 2020, 16:55:22) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
  jinja version = 3.0.3
  libyaml = True
No config file found; using defaults
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
Loading callback plugin default of type stdout, v2.0 from /home/REDACTED/test/venv/lib64/python3.6/site-packages/ansible/plugins/callback/default.py
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: playbook.yml ********************************************************************************************************************************************************************************************************************************************************
Positional arguments: playbook.yml
verbosity: 4
connection: smart
timeout: 10
become_method: sudo
tags: ('all',)
inventory: ('/etc/ansible/hosts',)
forks: 5
1 plays in playbook.yml

PLAY [Demonstrate Ansible bug] ************************************************************************************************************************************************************************************************************************************************
META: ran handlers

TASK [Update pip in test virtualenv] ******************************************************************************************************************************************************************************************************************************************
task path: /home/REDACTED/test/playbook.yml:12
<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: REDACTED
<127.0.0.1> EXEC /bin/sh -c 'echo ~REDACTED && sleep 0'
<127.0.0.1> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /home/REDACTED/.ansible/tmp `"&& mkdir "` echo /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678 `" && echo ansible-tmp-1637837031.3618085-76233-273600869189678="` echo /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678 `" ) && sleep 0'
Using module file /home/REDACTED/test/venv/lib64/python3.6/site-packages/ansible/modules/pip.py
<127.0.0.1> PUT /home/REDACTED/.ansible/tmp/ansible-local-76226li2q81vb/tmptxkwmgu5 TO /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678/AnsiballZ_pip.py
<127.0.0.1> EXEC /bin/sh -c 'chmod u+x /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678/ /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678/AnsiballZ_pip.py && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'sudo -H -S -n  -u root /bin/sh -c '"'"'echo BECOME-SUCCESS-ofcnvczhymkuiiofkpnkkjeubhdkhtym ; /home/REDACTED/test/venv/bin/python3.6 /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678/AnsiballZ_pip.py'"'"' && sleep 0'
<127.0.0.1> EXEC /bin/sh -c 'rm -f -r /home/REDACTED/.ansible/tmp/ansible-tmp-1637837031.3618085-76233-273600869189678/ > /dev/null 2>&1 && sleep 0'
fatal: [127.0.0.1]: FAILED! => {
    "changed": false,
    "cmd": [
        "/usr/bin/python3.6",
        "-m",
        "venv",
        "-p/home/REDACTED/test/venv/bin/python3.6",
        "/test_venv"
    ],
    "invocation": {
        "module_args": {
            "chdir": null,
            "editable": false,
            "executable": null,
            "extra_args": null,
            "name": [
                "pip==21.1.2"
            ],
            "requirements": null,
            "state": "present",
            "umask": null,
            "version": null,
            "virtualenv": "/test_venv",
            "virtualenv_command": "/usr/bin/python3.6 -m 'venv'",
            "virtualenv_python": null,
            "virtualenv_site_packages": false
        }
    },
    "msg": "\n:stderr: usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]\n            [--upgrade] [--without-pip] [--prompt PROMPT]\n            ENV_DIR [ENV_DIR ...]\nvenv: error: unrecognized arguments: -p/home/REDACTED/test/venv/bin/python3.6\n"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************************************************************************
127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
virtualenv_python:
    description:
      - The Python executable used for creating the virtual environment.
        For example C(python3.5), C(python2.7). When not specified, the
        Python version used to run the ansible module is used. This parameter
        should not be used when C(virtualenv_command) is using C(pyvenv) or
        the C(-m venv) module.
    type: str
    version_added: "2.0"
  state:
    description:
      - The state of module
      - The 'forcereinstall' option is only available in Ansible 2.1 and above.
    type: str
    choices: [ absent, forcereinstall, latest, present ]
    default: present
  extra_args:
    description:
      - Extra arguments passed to pip.
    type: str
    version_added: "1.0"
  editable:
    description:
      - Pass the editable flag.
    type: bool
    default: 'no'
    version_added: "2.0"
  chdir:
    description:
      - cd into this directory before running the command