A couple of subtle bugfixes.
Remove LineCounter and have code generators use a list instead.
Further fine tuning of conflict detection.
better logging of compiler identification
Clean up usage of header objects and header names.

Header objects are now hashable, allowing us to use them as dictionary
keys in several places, which means we don't have to map back and forth
betweem the header objects and the header names; this particularly tidies
up the conflict tester. Also, make a more principled distinction between
"enumerate the list of dependencies of this header" and "generate code to
include this header", which means we don't have to care about the difference
between a header and a special dependency in a bunch more places.