deciding which hash to use (changes or self) based on whether changes are present introduces a third way of deciding if we're updating or creating. one effect is that this object would be half-saved:

obj = Parse::Object.new('Foo')
obj.merge!('bar' => 1)
obj['baz']
obj.save

we should centralize these:

1.  #save uses "if @parse_object_id"
2.  #new? uses self["objectId"].nil?
3.  this uses @changes.empty?

it never makes sense to be POST'ing a subset of fields on creation.  it would probably be safer to filter the PUT to the fields that are changed than to maintain a parallel hash of their actual values.