Adds the ability to store UniquenessConstraints in the Schema.

The constraints are not used for anything or applied in any way, all we do is store them in the schema store.
We have the ability to store, retrieve, and drop UniquenessConstraints, both from transactional state, and stored state.
Refactors TxState to hold temporary state instead of writing to PersistenceManager.

Makes updating the schema with constraints invalidate the schema state.
  This is the primary driver for the refactoring, there are now appropriate hooks for this.

Allows SchemaState to contain state without having to write to WriteTransaction until pre-commit.
  By making the lowest level TransactionContext invoke TxManager.commit() in its commit() method,
  all TransactionContexts can do things both pre and post commit (by doing things before or after
  invoking the delegate. This allows us to defer generating ids and records for things that change
  in a transaction until we know we are about to commit the transaction.

Restructures then Operations interfaces in the kernel API to a clearer, more useful separation.
  Separating read from write operations, and separating operations on the schema from operations
  that change entities, and from operations about key-generation (property keys, labels, and
  relationship types). Changes to schema state is also split out into its own Operations
  interface, but without a Read/Write split, since these operations are not reads/writes against
  the stored data, and as such not transactional operations in the same way.
  These Operations interfaces come together in a few utility interfaces, grouping the operations
  along the two axis that they are divided by before coming together into StatementContext.
Merge pull request #731 from thobe/store-constraints

UniquenessConstraints stored (durably) in the schema.