test: print excess debugging when the '-debug' flag is provided

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
server: avoid transactions for 'internal' store nodes

When we store internal data in the persistent store, we have only
a single writer (us) and hence there is no chance of conflict.
Therefore we can avoid transactions and don't have to worry about
what to do if a transaction is aborted.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>
transactions: further simplify by replaying all transactions

A transaction is now considered a stored program which should
be executed on 'commit' against the state of the system when
the 'transaction_begin' was received.

When the user requests 'transaction_commit', we re-run the
program and verify the responses we sent to the user previously
are still valid (e.g. Reads return the same data, Writes are
accepted). If the responses all match then we re-run the program
a second time against the live store.

This avoids the need to persist the store contents (keys, values
and quotas) for each transaction to allow us to implement an O(1)
commit operation. We can store the intermediate state of transactions
in the regular heap and simply abort the transactions if we crash.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>