Fixed transact swing implementation

Previous port to transact had a problem - if you want to use view to
create a transaction to update the UI, you need to make sure that the
same transaction performs all the work. Previously, some functions
started their own transactions within the main view transaction, which
means anything read by the inner transactions would not be monitored
for calling the view transaction again.

Essentially the fix (which also makes the code simpler) is to pass the
same Txn or TxnR through to any functions called by a transaction (and
which read Shelf state - otherwise there is no need). This has also
been done for onMouse handlers, where it is neater to create one large
transaction that covers all handling of the mouse action.