Allow lint on the crate root and filter linted file paths

The lint modes have the following behaviors:

  - Cargo: full path
  - Crate root: full path
  - Single file: standard SublimeLinter (no path filtering for single file)

Resolve relative paths according to some base directory eg. the Cargo.toml directory
The path comparison uses `os.path.realpath` to normalize comparison. This full path
comparison prevents situations where matches in one file show up in another,
for example when there are multiple `mod.rs` files.

When not using cargo, this allows the linting of files in the module hierarchy that do not compile in isolation.
For example, invoking rustc on a module that `use`s something with an absolute path from the crate root, will fail.
Instead of invoking rustc on a single file, we do so on the crate root so that all imports are resolved and then
filter the errors in the current file (same as when using Cargo.toml).

This behavior can be enabled by using the `use-crate-root` option. By default, the crate root is considered to be
`main.rs` or `lib.rs`. This can be overridden by using the `crate-root` option. If no crate root is found, the
current file is linted instead.