transact(f, origin = null) {
    transact(this, f, origin);
  }
Changes that happen inside of a transaction are bundled. This means that
the observer fires _after_ the transaction is finished and that all changes
that happened inside of the transaction are sent as one message to the
other peers.

@param {function(Transaction):void} f The function that should be executed as a transaction
@param {any} [origin] Origin of who started the transaction. Will be stored on transaction.origin

@public