have Source objects work with empty source paths

This ensures a Source obj always returns a list of files.  Before,
if the source path was empty or missing, the list of source files
would be `nil`.

Now, in the above scenario, the Source obj just returns an empty
list as expected.

I've added some tests to cover this scenario to prevent future
regressions.