Changing code structure for locked objects: creating helper methods
acquire_read_lock and acquire_write_lock that return objects that
encapsulate the canonical internal value of a variable as well as its
dirty value.  This should essentially shift code from the get_val and
set_val methods into acquire_read_lock and acquire_write_lock method.
Decoupling the acquire_read_lock and acquire_write_lock methods from
get_val and set_val should make it easier to write Waldo container
objects, which have methods such as add_key/delete_key, which must
acquire write locks, but not necessarily for setting_vals.

This commit just adds acquire_read_lock.  The next one will acquire
write lock.
Refactored acquiring write lock into its own method.
Refactored data wrapper class so that can use different data wrappers for different locked objects (eg., if need to deep copy with pickle.)
Added classes for reference types (lists/maps).
Added a basic length reader-reader test to begin testing that locked container objects work appropriately.
Added mechanism for initializing lists and maps with default values.
Minor fixes to ensure that could write data into lists/maps and read it out.
Added test case to ensure that writes to lists and maps, absent
conflict, are committed correctly.
Adds basic test of conflicting writes on shared list/map.
Added a test case to ensure can operate on different elements of same
container in parallel.
Minor code refactoring so that other tests can use partner endpoint code.
Now serializing peered data that has been written to and transmitting
it between endpoints.
Added a test for sending sequence local data back and forth.