##### SUMMARY
Currently the module ufw does not allow to specify two network interfaces for forwarding rules (rule='allow' routed='yes').
What I'd like to achieve is this rule:
`ufw route allow in on ethX out on ethY to 10.0.0.0/8 from 192.168.0.0/24`

To my knowledge, the best one can do is pick one interface and decide to flag it with "in" or "out" traffic using the `direction` property. So the equivalent of either:
`ufw route allow in on ethX to 10.0.0.0/8 from 192.168.0.0/24` or 
`ufw route allow out on ethY to 10.0.0.0/8 from 192.168.0.0/24`

Is there a mechanism to provide both interfaces to the module?

##### ISSUE TYPE
- Feature request

##### COMPONENT NAME
module ufw

##### ANSIBLE VERSION
```
ansible 2.8.2
  config file = /mnt/c/dev/sandboxes/ansible/ansible.cfg
  configured module search path = [u'/home/me/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /home/me/virtualenvs/ansible/local/lib/python2.7/site-packages/ansible
  executable location = /home/me/virtualenvs/ansible/bin/ansible
  python version = 2.7.12 (default, Dec  4 2017, 14:50:18) [GCC 5.4.0 20160609]
```

##### CONFIGURATION
```
ANSIBLE_PIPELINING(/mnt/c/dev/sandboxes/ansible/ansible.cfg) = True
DEFAULT_ROLES_PATH(/mnt/c/dev/sandboxes/ansible/ansible.cfg) = [u'/mnt/c/dev/sandboxes/ansible/.imported_roles', u'/mnt/c/dev/sandboxes/ansible/roles']
DEFAULT_VAULT_PASSWORD_FILE(env: ANSIBLE_VAULT_PASSWORD_FILE) = /home/me/.vault_pass.txt
```

##### OS / ENVIRONMENT
Ubuntu Linux 18.04 LTS


##### STEPS TO REPRODUCE
Cannot really (re)produce, we just can't express it. There is a single parameter `interface` and we would need 2. (Or a convention to pass a tuple of interfaces into `interface`, comma separated?)


##### EXPECTED RESULTS
Being able to specify an "in" interface and an "out" interface.
In the following snippet, only the "out" interface can be mentioned.
```yaml
changed: [testvm1] => (item={u'direction': u'out', u'to_ip': u'0.0.0.0/0', u'interface': u'ethY', u'route': u'yes', u'from_ip': u'192.168.0.0/24', u'rule': u'allow'}) => {
    "ansible_loop_var": "item",
    "changed": true,
    "commands": [
        "/usr/sbin/ufw status verbose",
        "/bin/grep -h '^### tuple' /lib/ufw/user.rules /lib/ufw/user6.rules /etc/ufw/user.rules /etc/ufw/user6.rules /var/lib/ufw/user.rules /var/lib/ufw/user6.rules",
        "/usr/sbin/ufw --version",
        "/usr/sbin/ufw route allow out on ethY from 192.168.0.0/24 to 0.0.0.0/0",
        "/usr/sbin/ufw status verbose",
        "/bin/grep -h '^### tuple' /lib/ufw/user.rules /lib/ufw/user6.rules /etc/ufw/user.rules /etc/ufw/user6.rules /var/lib/ufw/user.rules /var/lib/ufw/user6.rules"
    ],
    "invocation": {
        "module_args": {
            "app": null,
            "comment": null,
            "default": null,
            "delete": false,
            "direction": "out",
            "from_ip": "192.168.0.0/24",
            "from_port": null,
            "insert": null,
            "insert_relative_to": "zero",
            "interface": "ethY",
            "log": false,
            "logging": null,
            "proto": null,
            "route": true,
            "rule": "allow",
            "state": null,
            "to_ip": "0.0.0.0/0",
            "to_port": null
        }
    },
    "item": {
        "direction": "out",
        "from_ip": "192.168.0.0/24",
        "interface": "ethY",
        "route": "yes",
        "rule": "allow",
        "to_ip": "0.0.0.0/0"
    },
    "msg": "Status: active\nLogging: off\nDefault: deny (incoming), allow (outgoing), deny (routed)\nNew profiles: skip\n\nTo                         Action      From\n--                         ------      ----\n10.0.0.0/8 on ethY         ALLOW FWD   10.254.33.0/24"
}
```
##### ACTUAL RESULTS
We must choose which interface we want to specify as there is only one `interface` parameter. (In my case, I will specify the output interface preferably over the incoming interface and count on the address range to be selective enough but YMVV)

"""
        Returns the major and minor version of ufw installed on the system.
        """
        out = execute([[ufw_bin], ["--version"]])
        lines = [x for x in out.split('\n') if x.strip() != '']
        if len(lines) == 0:
            module.fail_json(msg="Failed to get ufw version.", rc=0, out=out)
        matches = re.search(r'^ufw.+(\d+)\.(\d+)(?:\.(\d+))?.*$', lines[0])
        if matches is None:
            module.fail_json(msg="Failed to get ufw version.", rc=0, out=out)
        
        major = int(matches.group(1))
        minor = int(matches.group(2))
        rev = 0
        if matches.group(3) is not None:
            rev = int(matches.group(3))
        return major, minor, rev
    params = module.params
    commands = dict((key, params[key]) for key in command_keys if params[key])
    
    ufw_bin = module.get_bin_path('ufw', True)
    grep_bin = module.get_bin_path('grep', True)
    
    pre_state = execute([[ufw_bin], ['status verbose']])
    pre_rules = get_current_rules()
    changed = False
    
    for (command, value) in commands.items():
        cmd = [[ufw_bin], [module.check_mode, '--dry-run']]
        if command == 'state':