Memfacts

As opened originally in #9766 this is the same thing just in it's own branch (as it should have been from the start) to avoid pr conflicts. Original text below:

This fixes problem originally discussed here: https://github.com/ansible/ansible/issues/8035

As discussed in the issue tracker the output now looks like the following:
```
        "ansible_memory": {
            "nocache": {
                "free": 395,
                "used": 197
            },
            "real": {
                "free": 37,
                "total": 592,
                "used": 555
            },
            "swap": {
                "cached": 0,
                "free": 2047,
                "total": 2047,
                "used": 0
            }
        }
```

And it includes the old top-level facts to preserve backwards compatibility.