##### 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.
update_password:
        description:
            - C(always) will update passwords if they differ.
            - C(on_create) will only set the password for newly created users.
        type: str
        choices: [ always, on_create ]
        default: always
        version_added: "1.3"
    expires:
        description:
            - An expiry time for the user in epoch, it will be ignored on platforms that do not support this.
            - Currently supported on GNU/Linux, FreeBSD, and DragonFlyBSD.
            - Since Ansible 2.6 you can remove the expiry time specify a negative value.
              Currently supported on GNU/Linux and FreeBSD.
        type: float
        version_added: "1.9"
    password_lock:
        description:
            - Lock the password (usermod -L, pw lock, usermod -C).
            - BUT implementation differs on different platforms, this option does not always mean the user cannot login via other methods.
            - This option does not disable the user, only lock the password. Do not change the password in the same task.
            - Currently supported on Linux, FreeBSD, DragonFlyBSD, NetBSD, OpenBSD.
        type: bool
        version_added: "2.6"
    local:
        description:
            - Forces the use of "local" command alternatives on platforms that implement it.
            - This is useful in environments that use centralized authentification when you want to manipulate the local users
              (i.e. it uses C(luseradd) instead of C(useradd)).
            - This will check C(/etc/passwd) for an existing account before invoking commands. If the local account database