I was hoping Larsson would chime in. The issue is with annotations.

p1 = syn.store(Project('Asdf', foo=1, bar=2))
p2 = syn.store(Project('Asdf', biz='a', bat='b'))

If we do the create-or-update thing here, we overwrite the initial annotations. Projects aren't versioned, so they're gone for good. Our choices are: throw an exception, overwrite old with new, keep the old and throw out the new, or try to merge them.

If createOrUpdate is off by default, it's less ambiguous, but maybe less convenient.