Fix warning relative path assignment

Relative paths for warnings were being set prior to actually determining the file path (which it was not explicit). This mean most warnings did not have a `@relative_path` and therefore the fingerprint was messed up because it is based on `@relative_path`.

Also, tests were modifying `Warning#code`, which messed up the fingerprints in test. Added some fingerprints to tests now that it works, but going to be big task to add them for all tests.

*Also*, there is no need to infer a file name for warnings created with templates that have the file name right there.