Fix issue https://github.com/ansible/ansible/issues/1194
Merge pull request #1200 from broferek/master

Fix for issue #1194
Only gather facts once per node per playbook run

Unless gather_facts: True is on the play
Merge pull request #1201 from dhozac/setup-once-per-node

Only gather facts once per node per playbook run
Abort a play at the start when no hosts matches, or no hosts are remaining

This change makes a distinction between no_hosts_matched and no_hosts_remaining.

In both cases we do not start facts-gathering, or run any tasks.

In the case that there are no more hosts remaining, we abort running tasks and abort the playbook.

I also cleaned up the leftovers from the previous patchsets, as these are no longer required.

This closes #1187.

Example playbook:

```yaml
---
- hosts: emptygroup
  tasks:
  - action: command date
  - action: command false

- hosts: all
  gather_facts: False
  tasks:
  - action: command ls
  - action: command false
  - action: command true

- hosts: all
  tasks:
  - action: command true
  - action: command false

- hosts: all
  tasks:
  - action: command pwd
```
Added a fail module in order to fail execution on certain conditions

In some cases you may want to deliberately fail the execution of a playbook. In our provisioning workflow we want to have safeguards in place to avoid provisioning systems that are already in production. Since we reboot physical and virtual systems, it is mandatory we take all the precautions to prevent accidental provisioning.

So in our use-case we have the following at the very start of the provisioning playbook:

    ### Safeguard to protect production systems
    - local_action: fail msg="System is not ready to be staged according to CMDB"
      only_if: "'$cmdb_status' != 'to-be-staged'"

and we repeat the same task in the (separate included) play that takes care of (re)booting the system using our own boot-media, so that it cannot be accidentally separately run by someone.
Make fatal errors red
Make ignored/skipped different from changed

Since a skipped/ignored action is _very_ different from actual changes to a system, it always bothered me that  it was not easily distinguishable when skimming the output. This change makes ignore/skip a different color, and I chose cyan. Contemplated using dark-gray/blue, but prefered something that is readable with most terminal colors.
Fix gather_facts assumption that SETUP_CACHE for a host is empty

We now check explicitely for 'module_setup' in the SETUP_CACHE in order to avoid skipping setup because SETUP_CACHE was populated some other way. Other modules can implement the same mechanism to test if they've already run.

This closes #1206.
Merge pull request #1202 from dagwieers/abort-play-abort-playbook

Abort a play at the start when no hosts matches, or no hosts are remaining
Merge pull request #1207 from dagwieers/gather_facts-fix

Fix gather_facts assumption that SETUP_CACHE for a host is empty
Merge pull request #1205 from dagwieers/ignore-cyan

Make ignored/skipped different from changed
Merge pull request #1204 from dagwieers/fatal-red

Make fatal errors red
Merge pull request #1203 from dagwieers/fail-module

A fail module in order to fail execution on certain conditions
Call os.path.expanduser in the creates= and removes= section of the command module so ~/ and the like works.