Add support for multi-pass lint checks, and chained locations

This changeset adds support for multi-pass lint checking. A detector
can indicate that it is interested in a second pass through the source
code.

A good example of where this is needed is the Unused Resource
detector. In the first pass, it tracks declarations and references,
and at the end of the first pass it knows which resources are
unused. However, at this point it's too late to compute detailed
location information about each unused resource. Without multi-pass
checks, it would have to track detailed location information for *all*
resources, and computing locations can be costly.

With multi-pass support, it just computes the unused resource names in
the first pass, and then in the second pass it computes details about
the locations of those resources found to be unused.

This now includes *chained locations*. For example, for an unused
string, all the different translations of the unused string are
marked. These do not generate separate unused messages, it simply adds
to the location chain for the original unused warning.

This changeset also updates all the error reporters (text, HTML and
XML) to include all the locations, not just the ones with messages.

This changeset also cleans up the API a little: context classes now
track the lint runner instead of the lint client (which can point to
the lint client), and the SDK info lives with the project rather than
with the context.

Change-Id: I14ca3310bd1165b7dff655486157d770a36c4eff
20 files changed