Neo data source gets enlisted the first write operation

instead of as of recently changed: to enlist on first read OR write
operation in a transaction. The problem with that was that even pure read
transaction had to write log entries in both the txlog as well as the
logical log for the resource itself which both would cause unnecessary
performance and contention problem around those logs.

This is alleviated by introducing the ability to
create a transaction but without (in XA resource terms) starting it.
PersistenceManager gives access to a ResourceHolder instead of the
NeoStoreTransaction (previously known as WriteTransaction) directly so
that in order to access to NeoStoreTransaction from the holder a decision
has to be made whether it's for reading or writing. The first write operation
will enlist the neostore resource on the transaction where the resource
gets started and start log entries are written in the appropriate logs.

Before the state where the resource is enlisted on the transaction the
NeoStoreTransaction instance is still there and functional for read
operations. This has the benefits that no log entries in any log
has been written about its existence.

The ResourceHolder also pulls in some other things that previously also
had leaked into NeoStoreTransaction.
Initial work on listing rels for a node via kernel API.

 o Simply adds the relevant methods to the Statement API and
   introduces a temporary bridge implementation in LegacyKernelOperations.
 o Remaining: Use implementation in surface APIs
 o Remaining: Move relevant NodeImpl/NodeManager code into kernel.
Fixes profile problem for queries starting with OPTIONAL MATCH
CoreAPI getRelationships now delegates to kernel API.

 o getRelationships in NodeProxy now uses the KernelAPI
 o getSingleRelationship in NodeProxy uses Kernel API
 o hasRelationships in NodeProxy uses the Kernel API
 o Remaining: Move NodeImpl & NodeManager code into kernel.
Coerce generic case conditions to predicates

Fixes #1818
Store the compiled top-level parse rule rather than rebuild
Merge pull request #1821 from cleishm/cypher-parser-optimisation

Store the compiled top-level parse rule rather than rebuild
Merge pull request #1816 from systay/optional-profile

Fixes profile problem for queries starting with OPTIONAL MATCH
Merge pull request #1819 from cleishm/generic_case_predicate

Coerce generic case conditions to predicates
Merge pull request #1815 from jakewins/kernel-list-rels

Initial work on listing rels for a node via kernel API.
Merge pull request #1806 from tinwelint/2.0-readonly-tx-no-writing

Neo data source gets enlisted the first write operation
Refactor master -> slave pushing to its own class.

 o Moves half the master -> slave push logic to its own class
 o Background slave pusher now uses the Neo Scheduler for its threads
 o Fixes a bug where the previous implementation didn't take into account
   that the queue of pushes sometimes does not accept another item,
   leading to the committing thread waiting for a callback that never
   gets called.

 o Remaining: There are still two pools of threads used for the pushing,
              it should all be consolidated into one service.
 o Remaining: The current implementation still leaks threads in a long
              running cluster. It maps threads to slaves, but does not
              do any cleanup if a slave disconnects. It would probably
              be better to consolidate all pushing into a single background
              thread.
 o Remaining: The push protocol is still master-[notify]->slave-[pull]->master
              it should be master-[push]->slave
Work on docs.
Merge pull request #1797 from jakewins/push-contention

Refactor master -> slave pushing to its own class.
Merge commit 'a3a4b8b'