### Summary

When installing a collection artifact from a URL or tarball, with a mismatched `version`, an exception is raised, that should be handled and a better message provided to the user.

### Issue Type

Bug Report

### Component Name
```
lib/ansible/galaxy/collection/__init__.py
```
### Ansible Version

```console
$ ansible --version
2.11+
```


### Configuration

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


### OS / Environment

N/A

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```shell
ansible-galaxy collection download -p . --no-deps sivel.toiletwater:==0.0.10
sed -i 's/version: 0.0.10/version: 0.0.9/' requirements.yml
ansible-galaxy collection install -p . -r requirements.yml -vvv
```


### Expected Results

Friendly error message

### Actual Results

```console
ERROR! Unexpected Exception, this is probably a bug: Provided candidate <sivel.toiletwater:0.0.10 of type 'file' from sivel-toiletwater-0.0.10.tar.gz> does not satisfy <sivel.toiletwater:0.0.9 of type 'file' from sivel-toiletwater-0.0.10.tar.gz>
the full traceback was:

Traceback (most recent call last):
  File "/Users/matt/projects/ansibledev/ansible/bin/ansible-galaxy", line 133, in <module>
    exit_code = cli.run()
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/cli/galaxy.py", line 552, in run
    return context.CLIARGS['func']()
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/cli/galaxy.py", line 75, in method_wrapper
    return wrapped_method(*args, **kwargs)
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/cli/galaxy.py", line 1186, in execute_install
    self._execute_install_collection(
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/cli/galaxy.py", line 1213, in _execute_install_collection
    install_collections(
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/galaxy/collection/__init__.py", line 512, in install_collections
    dependency_map = _resolve_depenency_map(
  File "/Users/matt/projects/ansibledev/ansible/lib/ansible/galaxy/collection/__init__.py", line 1329, in _resolve_depenency_map
    return collection_dep_resolver.resolve(
  File "/Users/matt/venvs/ansibledev/lib/python3.9/site-packages/resolvelib/resolvers.py", line 453, in resolve
    state = resolution.resolve(requirements, max_rounds=max_rounds)
  File "/Users/matt/venvs/ansibledev/lib/python3.9/site-packages/resolvelib/resolvers.py", line 347, in resolve
    failure_causes = self._attempt_to_pin_criterion(name, criterion)
  File "/Users/matt/venvs/ansibledev/lib/python3.9/site-packages/resolvelib/resolvers.py", line 221, in _attempt_to_pin_criterion
    raise InconsistentCandidate(candidate, criterion)
resolvelib.resolvers.InconsistentCandidate: Provided candidate <sivel.toiletwater:0.0.10 of type 'file' from sivel-toiletwater-0.0.10.tar.gz> does not satisfy <sivel.toiletwater:0.0.9 of type 'file' from sivel-toiletwater-0.0.10.tar.gz>
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
collection,
        b_collection_path, b_collection_output_path,
        artifacts_manager,
):
    r"""Install the collection from source control into given dir.