<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
When the ec2_asg module attempts to evaluate whether tags for an ASG have changed, it compares the input list of tags (in the order given) to the API result (in the order returned by the API, A-Za-z). If the ordering is not the same (non-alphabetical input), the module believes that modifications have been made, and issues API calls to replace the tags. 

This is due to the [use](https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/cloud/amazon/ec2_asg.py#L1047) of `zip()` without respect to key ordering. This can be resolved by sorting the input dictionaries by key prior to `zip()`, or by switching to something [like](https://github.com/ansible/ansible/blob/73e171fd946b74089a99051858d8d49e561dea41/lib/ansible/module_utils/ec2.py#L706) `compare_aws_tags()` from `ansible.module_utils.ec2`.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
<!--- Write the short name of the module, plugin, task or feature below, use your best guess if unsure -->
ec2_asg

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
2.8.4
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
N/A
```

##### OS / ENVIRONMENT
<!--- Provide all relevant information below, e.g. target OS versions, network device firmware, etc. -->
N/A

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
```yaml
- ec2_asg:
    name: special
    load_balancers: [ 'lb1', 'lb2' ]
    availability_zones: [ 'eu-west-1a', 'eu-west-1b' ]
    launch_config_name: 'lc-1'
    min_size: 1
    max_size: 10
    desired_capacity: 5
    vpc_zone_identifier: [ 'subnet-abcd1234', 'subnet-1a2b3c4d' ]
    tags:
      - environment: production
        Propagate_at_launch: no
```
This will always show modification, as the tags are listed in an order different than the API response.
<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->

Tags are evaluated by matching keys, without regard to alphabetical input ordering
##### ACTUAL RESULTS

Ansible shows modifications have occurred and updates the ASG's tags, even though no true modifications have been made. 
instances_to_terminate = []
    instances = (inst_id for inst_id in replace_instances if inst_id in props['instances'])
    
    
    if module.params.get('launch_config_name'):
        if lc_check:
            for i in instances:
                if 'launch_template' in props['instance_facts'][i]:
                    instances_to_terminate.append(i)
                elif props['instance_facts'][i]['launch_config_name'] != props['launch_config_name']:
                    instances_to_terminate.append(i)
        else:
            for i in instances:
                if i in initial_instances:
                    instances_to_terminate.append(i)
    elif module.params.get('launch_template'):
        if lt_check:
            for i in instances:
                if 'launch_config_name' in props['instance_facts'][i]:
                    instances_to_terminate.append(i)
                elif props['instance_facts'][i]['launch_template'] != props['launch_template']:
                    instances_to_terminate.append(i)
        else:
            for i in instances:
                if i in initial_instances:
                    instances_to_terminate.append(i)
    return instances_to_terminate
def terminate_batch(connection, replace_instances, initial_instances, leftovers=False):