Allow multi-file module structures for non-cargo lints

Using a tempfile does not work, because any file declaring a module will fail compilation when the module is not found in the temporary directory. Instead, invoke rustc directly on the source tree using `communicate` instead of `tmpfile`.