String->long in-memory efficient index for batch importer

for use in cases where the node ids given in the node/relationship input
aren't actual record ids, but arbitrary strings. When using this type of
IdMapping the node ids (strings) are fed to the in-memory index during the
node import stage and sorted, and general prepared for getting
String->long later in other stages that deals with relationships where
they also specify these strings as the start/end node ids.
Merge pull request #3110 from tinwelint/2.2-batch-import-external-ids

[2.2] String->long in-memory efficient index for batch importer
Move PeriodCommitHint AST node out of Clauses

And rename Hint to UsingHint
For annotation, use ASTNode+Position over objId
Use SemanticState to track expandStar rewrites
Split ClosingClause

Into HorizonClause for scoping, and ProjectionClause for projection
Make expandStar match on clauses

Rather than on the ReturnItems
Introduce _PRAGMA WITH NONE

Used when all projections have been inlined
Introduce _PRAGMA WITHOUT

Used to remove identifiers from scope
Use _PRAGMA WITHOUT to remove introduced identifiers
Allow additional items on `WITH *` and `RETURN *`

e.g. `WITH *, 1 AS m`

Also use this in pre-semantic-check rewriting, to ensure
`ORDER BY` clauses on `WITH *` and `RETURN *` are correctly normalized,
removing the need to do this again during `projectFreshSortExpressions`.