Add some more comments.
Fixed the new() function so its default kwarg value gets a new object created for each call; and added some comments
base.py: change getDataAtFxn() to throw ValueError instead of IOError; dont wait for in-put stream to end when fxn() is done close all connections. test.py: update exception handlers for getDataFxn()/getDataAtFxn() to expect ValueError; add IOError exception handlers for setDataFxn()