1) Change from parallel to series execution of instructions within transaction.

    i) although parallel execution of instructions was nicely asynchronous, it
    made it hard to tell in what order two instructions that updated the same
    collection were executed, and hence to tell what order to run rollbacks.

    ii) in the event of error we weren't waiting for all instructions
    in the parallel to finish before calling rollbacks (admittedly fixable)

    iii) series execution increases the composeability of instructions, and is
    kinder on the brain.

2) Rollbacks are attempted in reverse, and aren't attempted if their instruction
was never executed.

3) Auto rollback instructions arguments are cloned before execution to avoid
state michief.

4) _ids for insert are now stored in transaction.execution.state[i] and written
to the db, to provide crash-proof rollback. This state is available to every
instruction and its rollback counterpart. Consequence is that instructions
must have 1-1 relationship with rollbacks (or be implicit), a check for this
is made

5) Function signature for instructions changed: arguments passed as a list to
avoid the 'vanishing callback' problem when incorrect numbers of arguments are
supplied to an instruction within a transaction