Added ReactionPolicy

This allows transactions to request that reactions are run either
immediately after any changes, or only once just before (attempting to)
commit the transaction.
This can be used for deserialisation, to allow for transient invalid
states (states that are not permitted by reactions, or would lead to
incorrect reactions) as a graph is deserialised step by step. Otherwise
it could be used for optimisation, if transactions don't care about
state as they run.
Added spec to test reaction policy implementation.