Cheaper way of telling wether or not a RecordState has changes
Defers creation of header information until commit if there are changes
Defers LockGroup creation until we see that there are changes to commit
Reuses tx state --> record state visitor
Reuses command list for extracted commands
Correctly builds collision information in StringIdMapper

in the rare case of colliding encoded values. If one or more values encode
to the same long value a collision map must be built with their actual
values to be able to correctly find those values later on. Normally, if no
collisions are detected this information can be thrown away and that's
indeed why it's thrown away eagerly in favor of less memory usage.
Makes StringEncoder absolutely garbage free
Implements ArrayCollection that has efficient clear()
Merge pull request #3287 from tinwelint/2.2-lower-tx-init-overhead

[2.2] lower tx init overhead
Rewrite plans with Apply/Optional/Expand to use OptionalExpand instead.
Merge pull request #3305 from pontusmelke/unnest-optional

[2.2] Rewrite plans with Apply/Optional/Expand to use OptionalExpand instead.
Extract plan rewriting into it's own class
Refactor unnestOptional

Since refactoring happens on already valid logical plans, we do not need to go
back to the original QueryGraph. We simply trust that the incoming plans are
valid.
Added argument ids to LogicalLeafPlan
Rewrite two consecutive Selection plans into a single one
Make OuterHashJoin able to work on multiple keys
Plan OPTIONAL MATCH using both Apply/Optional and OuterJoin
Fixes issue in BufferedCharSeeker with false negatives from #seek

happened when last character on a line would be a delimiter.
Corrected some minor pom blemishes
Moves CSV reader/parser from batch importer to separate component

because it's a rather separate concern as a whole. There is benefit having
a CSV reader and parser available and accessible without the need to pull
in the neo4j kernel as well.