Added pickle/unpickle functionality to the base classes. These methods simply return a string which is to be interpreted as an array of bytes that represent the data that the object held. This string can in turn be unpickled into an exact duplicate of the original object. Also added pickle constructor which takes as input a pickle string and constructs itself from that.