These don't have the ability to preserve the semantics of the reference
based transaction model and so can make use of the nicer auto
transaction model.
This removes the requirement for `&mut self`s on some of the immutable
methods on `Automerge` which can be quite inconvenient.
I've reimplemented the main functions on `Automerge` that manipulate
state to create a transaction for their op for ease of use but not
performance. I've updated the edit trace to run in a single
transaction, like on a page load.
Wasm API still needs working on at the moment to expose this properly.
Rather than returning an OpID for every mutation, we now return an
`Option<ObjId>`. This is `Some` only when a `make*` operation was
applied. This `ObjID` is an opaque type which can be used with any
document.
Repeatedly setting the same value for a particular (obj, key)
combination now no longer generates an operation. To allow this we
modify the return value of `automerge::set` so that it may return an
`Option<OpId>` instead of an `OpId`.
Signed-off-by: Alex Good <alex@memoryandthought.me>