Create new format for the (Lucene) LabelScanStore.

The NodeRangeDocumentLabelScanStore overcomes the 2B document limitation in Lucene
by storing information about labels for multiple nodes in each Lucene document.

Each lucene document represents a range of 32 or 64 (configurable) nodes with same high order bits.
Each document contains a field for each label that any node in the range has. The value of the field
is a bitmap with a bit set for each node in the range that has that label present.
Adds the ability to do label scan search as a Term Query.

Potentially this is more efficient than using Range Queries to emulate "key presence" queries.

This is done by having a separate field that is indexed only (not stored in the document) for searches,
and then not indexing the bitmap field. So storage wise, this implementation should be about the same.
Although it is possible that both in terms of storage overhead, and query efficiency having multiple
different indexed fields is sub optimal, in which case this implementation would be better.
This is to be determined by benchmarks.
Use the NodeRangeDocumentLabelScanStorageStrategy.
Fixes some problems with node range representation

o Updates to lucene index was made in batches, but after a flush there was
  no "refresh" of the searcher, so some updates was lost the next time the
  same document was updated again.
o the wrong field was used to discover how many hits a TopDocs result had.
  It worked for the first query, but not consecutive "page" queries.
removing Gremlin references
Allow OPTIONAL MATCH to be recognised in Cypher

Currently returns an "unsupported" semantic error
long->int storage optimization for 32-bit bitmap format

so that the lucene index may take up less space also made
BitmapDocumentFormat into an enum with the same values as BitmapFormat
and then pulled in the format used in SearchAcceleratedBitmapDocumentFormat
since it always came out best in performance tests.
Adds OPTIONAL MATCH to Cypher
Merge pull request #1316 from peterneubauer/gr-rem

removing Gremlin references
Merge pull request #1319 from systay/optional-match-to-merge

Optional match
Merge pull request #1314 from tinwelint/2.0-better-label-scan

LabelScanStore implementation that scales up to 137 billion labeled nodes
Allow sorting by any deterministic expressions.

Make it possible to sort by any expression that is deterministic.
Which is to say, any expression that does not contain a call to the rand().

So x+1 will work, but rand()+x or similar will not.
Make NodeByIdOrEmpty use complex expressions

o Pass boundIdentifiers to NodeFetchStrategy
o Extend NodeByIdOrEmpty to pick up expressions over bound identifiers
o Add support for collections to NodeByIdOrEmpty
Mark predicates as solved in StartPointChoosingBuilder
Merge pull request #1323 from boggle/2.0-constant-id-expressions

2.0 constant id expressions
Merge pull request #1321 from chrisvest/cypher-order-by-expression

Allow sorting by any deterministic expression.
Further improving error reporting from a flakey test.

o TestConcurrentRelationshipChainLoadingIssue is failing occasionally in CI
Move Cypher 1.9 parser into compiler package
Move Cypher 2.0 parser into compiler package
Move internal Cypher classes into internal package