Initial drop of multitools lib from the CD archiver project.
Added listeners
Created distutils config so this becomes a site-packages lib, usable by
other projects.
Improved listener functionality so listeners receive messages to
derivatives of the specified message types, not just the exact type.
Switched the concept of loggers for that of resident processes;
Resident processes are those that are purely reactive, and should
terminate once all other processes terminate; Loggers can be implemented
using broad-based listeners that are resident
Eliminated LoggerProcessesMessages which send a list of names and
corresponding ids to a logger.  Might need to replace this in the future,
but it might be better to have a system which allows the logger to ask for
a name for an id.
Made listeners able to listen to messages not sent to target_id==1, so that
loggers as a concept still work (duh!)
Made sending messages use sets when resolving ids into input queues.
Used set comprehension instead of iterations, for neatness and speed
Fixed DebugLogger to use self.prnt not print, so it actually
prints debug statements now!
Introduced constants for broadcast and listener-only message
targets, rather than using 0 and 1 (use ProcessList.BROADCAST
and .LISTENERS as your target_ids now)
Using collections.deque for the Process.queries list for performance reasons.
Using a duplex Pipe rather than two Queues for input and output, for perf.
Added test for non-blocking pre-querying of ids.
Fixing TODOs
Improving docs
Speeding up tests (reduce sync wait - still seems to work!)
Note: Can't replace messaged['val'] from testPrnt() with
multiprocessing.Value() since the problem is not sharing state
with processes, but sharing state across a function boundary.
Split IPC/Supervisor functionality out into new Supervisor class for better encapsulation and quicker testing once I split out these classes into separate files
Fixed it so that handleMessage can return False so stop everything.  Currently untested; added TODO note in testing, as it's currently untested.
Made wrap_op private because, well, because I can.
Added testing for the newly slim ProcessList class.
Broke out ipc code into submodule.
Broke out supervisor and client process code, as well as ipc messages and
logger code.
Hacked TestProcess (in client.py) to not depend on supervisor code from
host.py.
Merge branch 'master' of https://github.com/williain/multitools