Match against lists in nested dicts in grains

This changes the behavior of all matcher which use ```subdict_match``` (which means, grains, pillars and probably more). 

The goal here is to cover matching things like ```{'baz': [{'foo': 'bar}]}```.

@terminalmage was kind enough to review this change and brought up the point that he's not certain that we should support both ```baz:*:foo:bar``` *and* ```baz:foo:bar```. My thinking here originally was that it would be nice to explicitly use a ```*``` to indicate matching against a list but supporting both behaviors might be problematic. 

This should definitely *not* by cherry-picked as it will need extensive testing over time. Refs #9991.