Fixed so that the cost is minimized when combining three plans with cartesian products.
Unignored a bunch of compiler tests
Merge pull request #3215 from pontusmelke/fix-cartesian-products

[2.2] Fixed so that the cost is minimized when combining three plans
Single thread pulling updates on HA machines

Moving from an HA communication design where updates gets streamed from
the master on most individual requests coming from slaves. This design
caused lots of duplicate transactions being streamed from master to each
slave, specifically if slaves issued write requests to the master.

Moving to a design where slave communication with its master does not
stream back transactions, except when doing store copy. Instead master
returns a transaction obligation saying which transaction id that must be
applied in order to continue. The slave will notify the single update
puller about that and will in turn be notified by the update puller
when that transaction has been applied. Many requests can poke the update
puller simultaneously and transaction pulling will piggy back on each
other, since there's only one thread pulling.

Benefits include:
- No code explicitly dealing with and preventing pull storms
- Less network communication with master
- Less load put on master
- Possibility for more optimizations regarding applying updates on slaves
  since updates are pulled in a single thread only.
Slaves applies transactions from master in batches

by having a specific TransactionAppender that doesn't do auto-forcing.
And since there's only one thread on each slave receiving transactions
from its master they are queued and applied in one go now and then like:

- append all queued transactions to log
- force log
- apply all queued transactions to store
Confusion
Merge branch '2.2-single-update-puller' of https://github.com/S124568/neo4j into 2.2-single-update-puller