Major re-working in light of some new log files.

It turns out the prefix on each line identifies a thread and the
output switches between different threads.  Each thread's part of the
story can be parsed the same way I was parsing a whole file, so I've
turned the parser inside-out, using generators as consumers, so that
each thread's part can be parsed by a separate consumer and I can
collect up all the results at the end.

There were a few other things the new files introduced me to, like
Thread lines, termination reports, bad free()s, access to memory that
isn't mapped and Address blocks with no stack (for memory not from
malloc of free).  Those were comparatively easy to handle.  When
iterating, deal with the fatal issues first (which might lead to
repeating them, but only if the user hasn't resolved them).
Have issues remember their victims.

An issue with an Address component tells that address.usedby(self); this now
also records the address in self.victims, another set.  TODO'd some sets that
I'd rather make use weak references.
Base Stack on a Tuple variant and use it for Frame.callers()
Support the ??? source better.

Use None instead a Source whose attributes are None.  Source now has
to cope with being compared to None, as a result; and Frame.get()
can use short keys for when that happens.
Made assorted assertions report the text being processed, if they fail.
Fix typo in UMR recognition string.
Support passing an instance to .ignore() and .repair() as leak.

Support calling with args (item.stack[n], item): if the passed value
for leak is an instance of Issue, replace with isinstance(leak, Leak).
Rename a variable that might have been confusing.

When checking the count returned by Issue.get(), don't use the same
variable name as is pervasively in use for line number.