Separate Data Transactions from Schema Transactions.

Also introduces a facade layer as the API of the kernel, with the
existing *Operations classes, and StatementState being used in the
implementation. Making the previous decorator-pattern based layered
design an implementation concern, moving towards the kernel
implementation being layered, but with different APIs in different
layers (or "layer groups").

Separates Data Transactions from Schema Transactions by separating
DataStatement from SchemaStatement in the API, and preventing a single
transaction from mixing the two.

Remove the means of accessing operations from outside of a
transaction, since transactions are mandatory now anyhow.

Wiring together of *Operations classes is now done in ONE place in
the Kernel class, instead of being spread out in multiple
implementations of the KernelTransaction interface. KernelTransaction
now really only has one implementation, that handles transaction logic
(commit and rollback) and initializing the StatementState.

The separation of Data Query from Schema Query in Cypher has only had
a few initial steps towards it, and should probably be taken further.

ReadOnlyStatementOperations delegates to
KeyReadOperations.{label,propertyKey}GetForName() for the
corresponding GetOrCreate methods, leaving it up to the caller to
handle the NO_SUCH_* constants. The assumption being that the caller
would not have to deal with it, but instead we make sure that any
method that accepts labelId or propertyKeyId as input can deal with
those constants in a sensible way. There is a bit more work to be done
in this direction, but in a ReadOnly scenario things work already.