##### SUMMARY

I am creating a system user account for Jenkins workers, and I want to create the home directory myself, after the user is already created.  Ansible 2.8 let me, current devel branch fails.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
user

##### ANSIBLE VERSION
```
ansible 2.9.0.dev0
  config file = /home/mg/src/deployments/provisioning/ansible.cfg
  configured module search path = [u'/home/mg/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /home/mg/src/ansible/lib/ansible
  executable location = /home/mg/src/ansible/bin/ansible
  python version = 2.7.16 (default, Apr  6 2019, 01:42:57) [GCC 8.3.0]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```
ACTION_WARNINGS(/home/mg/src/deployments/provisioning/ansible.cfg) = False
CACHE_PLUGIN(/home/mg/src/deployments/provisioning/ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/home/mg/src/deployments/provisioning/ansible.cfg) = .cache/facts/
CACHE_PLUGIN_TIMEOUT(/home/mg/src/deployments/provisioning/ansible.cfg) = 86400
DEFAULT_CALLBACK_WHITELIST(/home/mg/src/deployments/provisioning/ansible.cfg) = [u'fancy_html']
DEFAULT_FORKS(/home/mg/src/deployments/provisioning/ansible.cfg) = 15
DEFAULT_GATHERING(/home/mg/src/deployments/provisioning/ansible.cfg) = smart
DEFAULT_HOST_LIST(/home/mg/src/deployments/provisioning/ansible.cfg) = [u'/home/mg/src/deployments/provisioning/inventory']
DEFAULT_LOG_PATH(/home/mg/src/deployments/provisioning/ansible.cfg) = /home/mg/src/deployments/provisioning/.cache/ansible.log
DEFAULT_REMOTE_USER(/home/mg/src/deployments/provisioning/ansible.cfg) = root
DEFAULT_STDOUT_CALLBACK(/home/mg/src/deployments/provisioning/ansible.cfg) = yaml
DEFAULT_VAULT_PASSWORD_FILE(/home/mg/src/deployments/provisioning/ansible.cfg) = /home/mg/src/deployments/provisioning/askpass.py
RETRY_FILES_ENABLED(/home/mg/src/deployments/provisioning/ansible.cfg) = False
```

##### OS / ENVIRONMENT
Ubuntu 19.04 on the controller, Ubuntu 16.04 and 18.04 on the targets.


##### STEPS TO REPRODUCE
```yaml
- hosts: all
  tasks:
    - name: create a user for the jenkins worker
      user: name=jenkins-worker home=/var/lib/jenkins-worker createhome=no shell=/bin/bash system=yes
      tags: [ jenkins, user ]

    - name: create /var/lib/jenkins-worker
      file: dest=/var/lib/jenkins-worker state=directory owner=jenkins-worker group=jenkins-worker
      tags: [ jenkins, user ]
```

##### EXPECTED RESULTS

I expect there to be a /var/lib/jenkins-worker, owner by jenkins-worker:jenkins-worker, with no dotfiles inside it.

##### ACTUAL RESULTS

<!--- Paste verbatim command output between quotes -->
```
TASK [jenkins-worker : create a user for the jenkins worker] ******************************************************************************************************************************************************
fatal: [xenial]: FAILED! => changed=false 
  msg: '[Errno 2] No such file or directory: ''/var/lib/jenkins-worker'''
fatal: [bionic]: FAILED! => changed=false 
  msg: '[Errno 2] No such file or directory: ''/var/lib/jenkins-worker'''
```

What's even more fun is that when I re-ran the playbook, it succeeded, and I don't understand what even is going on any more.
'''Add or remove SELF.NAME to or from GROUP depending on ACTION.
        ACTION can be 'add' or 'remove' otherwise 'remove' is assumed. '''
        rc = 0
        out = ''
        err = ''
        changed = False
        current = set(self._list_user_groups())
        if self.groups is not None:
            target = set(self.groups.split(','))
        else:
            target = set([])
        if self.append is False:
            for remove in current - target:
                (_rc, _err, _out) = self.__modify_group(remove, 'delete')
                rc += rc
                out += _out
                err += _err
                changed = True
        for add in target - current:
            (_rc, _err, _out) = self.__modify_group(add, 'add')
            rc += _rc
            out += _out
            err += _err
            changed = True
        return (rc, err, out, changed)
    def _update_system_user(self):