### 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
"""Installed collections management package."""
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import errno
import fnmatch
import functools
import json
import os
import shutil
import stat
import sys
import tarfile
import tempfile
import threading
import time
import yaml
from collections import namedtuple
from contextlib import contextmanager
from ansible.module_utils.compat.version import LooseVersion
from hashlib import sha256
from io import BytesIO
from itertools import chain
from yaml.error import YAMLError
try:
    import queue  
except ImportError: