Update planning of optional match in Ronja

Before this change, planning of OPTIONAL MATCH
was done as if order between these clauses was
not important. This change respects the order
of the clauses, and simplifies which operators
are used in solving them.
Change how greedy the greedy planner is

Before this change, for each step taken in the planning process,
a single best plan would be picked, and added to the plan table.
This would prune out any plans covered by the new best plan.
After this change, Ronja picks the best plan per set of covered ids.
This broadens the search space some, and prepares the planner
to be able to find more effective plans for queries with cycles.
Hash join support for joining on multiple keys.
Merge pull request #3144 from systay/new-new-greedy-strategy

[2.2] Better plans for patterns with cycles in Ronja
Disable START n = node(...) in favor of MATCH n WHERE id(n) = ...
Add legacy index hints to the query graph
Build legacy index seek plans
Started fixing tests that use the discontinued start clause to use newer match/id syntax
Updated cypher docs to new syntax without start clause
Change scoping rules for UNION

1) Create a child scope for the LHS and RHS of a union clause.
2) Move the "columns have to be the same" check to semanticCheck.
Merge branch 'start-hints'
Ability to persist counts durably.

This has not been wired in yet, the intention is to wire it in to store
on log rotation only.
Circumvent the PageCache for (stream) reading.

Since the PageCache only supports one cursor per thread, we cannot both
read through the PageCache and write through the PageCache when rotating
the CountsStore. As a workaround we read directly from the file system
when streaming through the source file during rotation.
Integrate writing.