(developery/technical) with_items + vars_files improvements, internals of SETUP_CACHE

Sorry, this is way too filled with jargon, so I'm only going to mention it here once, and it's not something I even need to put in the docs. However, I know people on IRC
used to help people with this, so I wanted to share.

As long as your path to something with vars_files doesn't have a host specific fact in it, it is now possible to use vars_files and with_items in conjunction.

When there is a problem, ansible will tell you which variable is unbound as well. It didn't do this before.

You can't use host specific facts though, so having vars_files load a file based on your IP address is doable, but if you do that, you can't use the variables produced
by those vars_files imports (with your IP address in it as a variable), because the tasks were precomputed before that happened.

For folks interested in internals, ansible is now smart enough to know when something in vars_files contains variables that are fact related or not, and also consumes a bit less RAM thinking about things in vars_files, as those variables are no longer duplicated per host.

Variable scoping should be a much less frequent question now.

With all of this work done, I can now also make the fact (setup) step completely optional, which I'm going to file a ticket for.

As a other technically confusing note, when we have apt-and-yum process with_items all in one giant hop (super streamlined one-step package install for multiple packages), those will operate differently enough too, and *WILL* be able to be used with host specific facts. To do this though, I first need those modules tweaked to support taking comma delimited lists of package specifications.

--Michael