Intersect generators

It used in pagegenerators.py to intersect generators listed in
command line.

Yield items only if they are yielded by all specified generators.
Threads (via ThreadedGenerator) are used in order to run generators
in parallel, so that items can be yielded before generators are
exhausted.

Threads are stopped when they are either exhausted or Ctrl-C is pressed.
Quitting before all generators are finished is attempted if
there is no more chance of finding an item in all queues.

Refactored ThreadList in tool.py and added method
ThrreadList.stop_all().

Change-Id: I53eb1f747f46e18a3dd220feef1e496fd36853e2
Merge "Intersect generators"