Creating queues is expensive.  I imagine, we generally will not need a signal queue for events.  Therefore, instead of pre-allocating a signal queue per event, only allocating signal queue if actually required.
Using urandom to generate 16byte random ids: profiles about twice as
fast for loads which are limited by the number of events/variables created.
Forgot to remove some of the logging code from notification map.
For local value types, do not create a separate Waldo variable.  Use immediate value.
Removed more logging.
Added thread pool to Waldo.  Note: it's painful that we're using a fixed-size thread pool per endpoint.  It would be much nicer to just use something like gevent to spin up individual threads.
Should use sendall instead of send.
Compressing message string when sending and receiving.
Stopped pickling the full version object of each piece of data and instead only passing tuples.
Have begun transitioning messages to use protocol buffers instead of just pickling.
Switched message for notification of peered message response over to protocol buffer.
Still transitioning messages to use protocol buffers.  This commit is the first part of updating sequence block requests.  Still need to create a submessage from getting variable store deltas.
Using protocol buffers for serialization and deserialization.  Also,
only updating other sides with deltas rather than full re-writes
whenever peered data change.
Switched partner notified of peered change messages over to protocol buffers.
Had some unresolved bugs handling variable store deltas (see previous commit).  This commit should handle them and assure that all unit tests are passing.
Moved partner message from first phase result over to protocol buffers.
Transferred additional subscriber message to protocol buffers.
Transitioned partner removed subscriber message to protocol buffers.
Switched backout commit request to protocol buffers.
Switched requests to complete the commit (ie., finish second phase of commit) over to protocol buffers.