Refactor; makes address object responsible for setting its own fields in the request, removes this code from the transaction object.
Add new fields to the SDK. Raise an exception when attempting to set an unknown field (avoids silent failures).
Allow transaction to accept either a customer ID or a Customer object. This allows us to hide the constructor for the Customer object (in order to force SDK consumers to instantiate them correctly through static methods).
Allow Address objects to have their attributes written to (instead of read-only). Also, omit the :region attribute for billing addresses (don't know why, but this is how it's specced in the API).
Refactor the Customer object to hide the constructor. Add two new methods, Customer.from_cc_info, and Customer.from_transaction_id -- these map to the two call paths in the CreateCustomer API call (see: http://help.paytrace.com/api-create-customer-profile). Includes unit tests.