Fix file.managed traceback when source is a list

If file.managed state has a source param which is a list, and none of
the URIs in that list are found, a traceback occurs. This commit
modifies salt.modules.file.source_list to raise an exception when source
is a list and no matches are found, and then catches that exception in
the file.managed state so that Salt can return gracefully with a False
result and meaningful error message.
Fix source list issue for file.recurse states

This commit fixes #9620 for file.recurse states. The bug report was for
file.managed, but the same issue would be encountered in file.recurse
states.

Also, some of the input validation for file.recurse has been improved
and cleaned up.
Merge pull request #9629 from terminalmage/issue9620

Fix file state tracebacks when source is a list