Add warning "fingerprints"

To facilitate tracking warnings, the JSON report will contain fingerprints for warnings which are a SHA256 hash of:

* Warning "code"
* S-expression of code that caused the warning
* Location (i.e., template name or class/method)
* Relative file path
* Confidence level

Warnings now have "warning codes" associated with them which are a little bit more fine-grained "warning types". In other words, a CVE will have the CVE for the "warning code" even if the "warning type" is "SQL Injection".

Note that "line number" is not included. It is entirely possible that two warnings will only differ by line number and thus have the same fingerprints. Tools should take this into account in a way that makes sense for them.

Edit: Most existing tests should probably be updated to include fingerprints, but that will probably happen later.