Make set/get_encoded_data into a real property.

This changes the semantics such that accessing the 'data' property will cause the encoded data to be deserialized. The converse is also true: accessing the 'encoded_data' property causes the Python data types to be serialized. If a proper encoder or decoder is not registered for the object's content-type, an exception will be raised. This means that the assumption about 'data' as a string being equivalent to 'encoded_data' is no longer valid and existing code that relies on that assumption will break.