### Summary

When using `difference` filter with element that have just case-difference in the value of the filter, only one is kept.

### Issue Type

Feature Request

### Component Name

filters

### Ansible Version

```console
$ ansible --version
ansible 2.9.10
  config file = None
  configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/site-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.8.8 (default, Mar  4 2021, 21:24:42) [GCC 10.2.0]
```


### Configuration

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


### OS / Environment

RHEL 7

### Steps to Reproduce

```yaml
- hosts: localhost
  vars:
    list1:
      - a
      - A
      - b
      - B
    list2:
      - b
  tasks:
    - debug:
        msg: "{{ list1 | difference(list2) }}"
    - debug:
        msg: "{{ list1 | difference([]) }}"
```

```shell
ansible-playbook playbook.yml
```

### Expected Results

**All** the elements of `list1` that don’t exist in `list2` (as documented)

```
TASK [debug] ***********************
ok: [localhost] => {
    "msg": [
        "a",
        "A",
        "B"
    ]
}

TASK [debug] ***********************
ok: [localhost] => {
    "msg": [
        "a",
        "A",
        "b",
        "B"
    ]
}
```

### Actual Results

```console
TASK [debug] ***********************
ok: [localhost] => {
    "msg": [
        "a",
        "B"
    ]
}

TASK [debug] ***********************
ok: [localhost] => {
    "msg": [
        "a",
        "b"
    ]
}
```


### Code of Conduct

I agree to follow the Ansible Code of Conduct
raise AnsibleFilterError("duplicates parameter to rekey_on_member has unknown value: {0}".format(duplicates))
    new_obj = {}
    if isinstance(data, Mapping):
        iterate_over = data.values()
    elif isinstance(data, Iterable) and not isinstance(data, (text_type, binary_type)):
        iterate_over = data
    else:
        raise AnsibleFilterTypeError("Type is not a valid list, set, or dict")
    for item in iterate_over:
        if not isinstance(item, Mapping):
            raise AnsibleFilterTypeError("List item is not a valid dict")
        try:
            key_elem = item[key]
        except KeyError:
            raise AnsibleFilterError("Key {0} was not found".format(key))
        except TypeError as e:
            raise AnsibleFilterTypeError(to_native(e))
        except Exception as e:
            raise AnsibleFilterError(to_native(e))
        
        
        if new_obj.get(key_elem, None):
            if duplicates == 'error':
                raise AnsibleFilterError("Key {0} is not unique, cannot correctly turn into dict".format(key_elem))
            elif duplicates == 'overwrite':
                new_obj[key_elem] = item
        else:
            new_obj[key_elem] = item
    return new_obj
class FilterModule(object):