Support property deletion

Changes to support property deletion in the API (e.g. deleting description on customer)

* Setting attributes to nil passes an empty string to the API, leading to legal properties being deleted
* Setting an attribute to an empty string is an error to avoid accidental unsets
* Setting permanent attributes (e.g. id) throws NoMethodError