##### SUMMARY
Behavior of failures inside of loops is inconsistent between "fatal" and "failed" outcomes. The "fatal" loop task loses data that one should reasonably expect to find in the `register` variable. It doesn't continue past the failed item, even though "failed" outcomes do, and templating errors can be specific to the `item` in the loop.

This limits the parameterization which can be done in integration tests, making them more verbose.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
lib/ansible/plugins/strategy/linear.py

##### ANSIBLE VERSION
```
ansible 2.10.0.dev0
  config file = None
  configured module search path = ['/Users/alancoding/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/alancoding/Documents/repos/ansible/lib/ansible
  executable location = /Users/alancoding/.virtualenvs/ansible3/bin/ansible
  python version = 3.7.7 (default, Mar 10 2020, 15:43:03) [Clang 11.0.0 (clang-1100.0.33.17)]
```

##### CONFIGURATION
defaults

##### OS / ENVIRONMENT
N/A, all local


##### STEPS TO REPRODUCE
playbook:

```yaml
- hosts: all
  gather_facts: false
  connection: local
  vars:
    loop_seq: [0, 0, 1]
  tasks:
    # expected case
    - name: Loop that fails due to task and ignores errors
      debug: msg="hello"
      failed_when: item == 0
      ignore_errors: true
      register: result
      loop: "{{ loop_seq }}"

    - debug: var=result

    # the undesired case
    - name: Loop that fails due to templating error in first entry and ignores errors
      debug: msg="{{ 5 / item }}"
      ignore_errors: true
      register: result
      loop: "{{ loop_seq }}"

    - debug: var=result
```



##### EXPECTED RESULTS
I expect to have generally the same ability to process errors in the registered `result` for both of the 2 tasks in that playbook that fail.

The task that fails due to `failed_when` (works same as `failed:`) exhibits desired behavior.

```
TASK [Loop that fails due to task and ignores errors] *******************************************************************************************************************************
failed: [localhost] (item=0) => {
    "msg": "hello"
}
failed: [localhost] (item=0) => {
    "msg": "hello"
}
ok: [localhost] => (item=1) => {
    "msg": "hello"
}
fatal: [localhost]: FAILED! => {"msg": "All items completed"}
...ignoring

TASK [debug] ************************************************************************************************************************************************************************
ok: [localhost] => {
    "result": {
        "changed": false,
        "failed": true,
        "msg": "All items completed",
        "results": [
            {
                "ansible_loop_var": "item",
                "changed": false,
                "failed": true,
                "failed_when_result": true,
                "item": 0,
                "msg": "hello"
            },
            {
                "ansible_loop_var": "item",
                "changed": false,
                "failed": true,
                "failed_when_result": true,
                "item": 0,
                "msg": "hello"
            },
            {
                "ansible_loop_var": "item",
                "changed": false,
                "failed": false,
                "failed_when_result": false,
                "item": 1,
                "msg": "hello"
            }
        ]
    }
}
```

With this, I can make assertions that multiple elements in the loop are failed. I can check that both `result.results[0].failed` and `result.results[1].failed` are `true`.

Additionally, the ignored failure does not prevent the task from running with the 3rd value, which doesn't fail.

##### ACTUAL RESULTS

I can't make any kind of item-by-item assertions about templating, because it exits on the first item in the loop, and it doesn't give any return data like `result.results`. It still ignores the overall loop errors and continues execution of the playbook.

```
TASK [Loop that fails due to templating error in first entry and ignores errors] ****************************************************************************************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: ZeroDivisionError: division by zero
fatal: [localhost]: FAILED! => {"msg": "Unexpected failure during module execution."}
...ignoring

TASK [debug] ************************************************************************************************************************************************************************
ok: [localhost] => {
    "result": {
        "exception": "Traceback (most recent call last):\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/executor/task_executor.py\", line 112, in run\n    item_results = self._run_loop(items)\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/executor/task_executor.py\", line 366, in _run_loop\n    res = self._execute(variables=task_vars)\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/executor/task_executor.py\", line 587, in _execute\n    self._task.post_validate(templar=templar)\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/playbook/task.py\", line 296, in post_validate\n    super(Task, self).post_validate(templar)\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/playbook/base.py\", line 431, in post_validate\n    value = templar.template(getattr(self, name))\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/template/__init__.py\", line 627, in template\n    disable_lookups=disable_lookups,\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/template/__init__.py\", line 582, in template\n    disable_lookups=disable_lookups,\n  File \"/Users/alancoding/.virtualenvs/ansible29/lib/python3.7/site-packages/ansible/template/__init__.py\", line 841, in do_template\n    res = j2_concat(rf)\n  File \"<template>\", line 12, in root\nZeroDivisionError: division by zero\n",
        "failed": true,
        "msg": "Unexpected failure during module execution.",
        "stdout": ""
    }
}
```

I can appreciate the need to separate failed/fatal cases, but I cannot convince myself that this error is caught in the right layer. The templated value `"{{ 5 / item }}"` obviously changes with each item in the loop.

If the end result of the loop is going to be ignored (not halt playbook execution), then all of the items in the loop should be tried.
'ANSIBLE_BECOME_PLUGINS': become_loader.print_paths(),
        'ANSIBLE_CLICONF_PLUGINS': cliconf_loader.print_paths(),
        'ANSIBLE_COLLECTIONS_PATH': to_native(os.pathsep.join(AnsibleCollectionConfig.collection_paths)),
        'ANSIBLE_CONNECTION_PLUGINS': connection_loader.print_paths(),
        'ANSIBLE_HTTPAPI_PLUGINS': httpapi_loader.print_paths(),
        'ANSIBLE_NETCONF_PLUGINS': netconf_loader.print_paths(),
        'ANSIBLE_TERMINAL_PLUGINS': terminal_loader.print_paths(),
    })
    python = sys.executable
    master, slave = pty.openpty()
    p = subprocess.Popen(
        [python, ansible_connection, to_text(os.getppid()), to_text(task_uuid)],
        stdin=slave, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env
    )
    os.close(slave)
    
    
    
    old = termios.tcgetattr(master)
    new = termios.tcgetattr(master)
    new[3] = new[3] & ~termios.ICANON
    try:
        termios.tcsetattr(master, termios.TCSANOW, new)
        write_to_file_descriptor(master, variables)
        write_to_file_descriptor(master, play_context.serialize())
        (stdout, stderr) = p.communicate()