Add Transaction.interrupt() to the Transaction API

Our first contribution to the kernel \o/.

This allows the user to interrupt a transaction, which is a more
forceful mode of failure that not only marks the transaction as failed
(i.e. such that it will be rolled back) but also causes any subsequent
kernel operations contained within that transaction to throw
an exception.

This functionality will be used as a user-facing query termination
facility.

Signed-off-by: Stefan Plantikow <stefan.plantikow@neotechnology.com>
Volatile AtomicReference access for every access to a kernel statement. I don't like that at all. Here's my suggestion: just have a `boolean interrupted` which is NOT `volatile`. Check the boolean on every operation. The thread running the transaction will eventually see that change, since it's not volatile. It will not see it right away, but it will see it eventually. So there will be a very very small overhead for the thread running the transaction, and it will be interrupted.