Fixes #911

Problem manifested like this:
After an unclean shutdown and recovery some index queries seemed to
return nodes duplicated in the same result.

Problem distilled to be:
When applying a transaction property updates (to be fed to indexes) are
derived by looking at the before/after views of the changed records.
Except for one case: where a label gets added to a node, in which case
updates for all its existing properties needs to also be generated. This
special case weren't previously isolated to labels added/removed to/from
existing nodes, but were always considered, even for (in that tx) created nodes.
This resulted in a normal commit working since properties aren't loaded
if the node already exists. But recovery would see those properties and
hence generate duplicate updates.

Solution:
Only generate label-changes-updates for (not previously existing) modified nodes.
Correctly decode property value supplied as a query parameter.

Now uses the same InputFormat mechanism used elsewhere in the REST API.
There is still special handling for JSON lists, that must be converted to native arrays.
It was not practical/safe to reuse all the logic from PropertySettingStrategy;
the ultimate solution will only come when we introduce an explicit type system.
Fixing Cypher docs bug and formatting.
Merge pull request #913 from tinwelint/fix-911

Fixes #911
Merge pull request #921 from apcj/2.0-array-property-values

Correctly decode property value supplied as a query parameter.
Index population failures can be retrieved later

There was confusion about who had the role of saying that an index was in
the FAILED state. Also sometimes the cause for the failure wasn't kept.

Now when an index population fails that index is put in FAILED state and
the schema index provider is responsible for keeping the failure cause as
well as being able to return it later.
Extra work
Move FailureStorage to kernel, document and make it always sync to disk
Merge pull request #922 from tinwelint/2.0-handle-out-of-disk-population

Handle out of disk space during index population.
Updated tests to run assertions in transaction.
Better formatting of property matcher description.
Move creation of FailureStorage to LuceneIndexPopulator.create()

Avoids leaving TM in a bad state when we fail in the constructor
Make index population job not flip during shutdown

o Fix lucene directory locking related test flakyness
Changed tests to run inside transactions when needed
Make QueryContext partially go through kernel API

o Make hasProperty use propertyKeyId
o Make removeProperty use propertyKeyId
o Make Cypher delete entity operations go through kernel
o Introduce TokenContext has a shared trait of {Plan,Query}Context
o Enhance TokenType and KeyToken to provide getId, getOptId, getOrCreateId functionality
o Make DeleteAction take a KeyToken argument
o Support for resolving property keys at plan build time
o Make expressions.Property use KeyToken property keys
o Make Cypher setProperty operation go through the kernel
o Replace prior LabelResolution
o Make CloseableIterator always return Maps and materialize Streams
o Make Cypher getProperty go through the kernel API
o Make dumpToString() reopen QueryContext as needed
o Rewrote MapPropertySetAction
Revert "Make index population job not flip during shutdown"

This reverts commit 7edfe46550259adc1f28792ddcade3322e137f0f.
Makes the sub-interfaces of StatementContext speak for themselves and lets
all implementations of (previously) CompositeStatementContext to go with
one or more sub-interfaces instead. This will have the benefit of having
the cake deflated, i.e. no delegates delegating to pure delegates, but
only delegations between actual implementations.

At the moment this incurs a higher cost when creating the statement
context, but much lower when interacting with the context. The next step
will probably be to reduce the amount of statement contexts we create.
Merge pull request #926 from tinwelint/2.0-perf-kill-composite-stmtctx

Deflation and splitting of StatementContext
Fixes for some flaky tests

o Safeguard against NullPointerException in ConstraintVerificationFKE, by
  using evidence() method to get it.
o Fix LuceneIndexRecoveryIT.shouldNotAddTwiceDuringRecoveryIfCrashedDuringPopulation
   - Test was not deterministic about completion of population job
   - Cleaned up/reverted changes in FlippableIndexProxy made because of the above issue
Added a mutating Cypher REST example. Use the Cypher prettifier everywhere.
Merge pull request #925 from systay/cykops

Make QueryContext partially go through kernel API