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`.
Prevent linting on unsaved files

The lint needs to happen on the source tree so linting an unsaved file does not work.

Investigate alternatives for unsaved files, such as only linting syntax.