Lift decision on which PlanType to use up to ExecutionPlan.run

This ensures that we use the same plan for both the profiled and normal case
Rename PlanType to ExecutionMode
Expose schemaStateFlush() from kernel
Test interaction of different execution modes with query caching
Log rotation won't happen on kernel panic

Log rotation checks that the kernel is still healthy, while having the
logFile lock, before doing the rotation. This to be on the safe side in
the event of panic, ehere the next recovery will have a chance to repair
the damages if all transactions are still in the active log.

For this the TransactionAppender#append method decides on success or panic
while holding the logFile lock and therefore safely communicates this
state to any log rotation happening concurrently.
Make sure that Table-bound resources are released when a primitive collection is closed
Merge pull request #3674 from boggle/lift-plan-type

Lift decision on which PlanType to use up to ExecutionPlan.run
Merge pull request #3704 from davidegrohmann/dp-exhaust

Refactor PlanTable
Equals and hashCode for primitive collections

Also fixes the PrimitiveIntLongVisitor and PrimitiveIntLongMap.visitEntries, such that visitation can throw custom exceptions or be halted midway.
Merge pull request #3701 from tinwelint/2.2-dont-rotate-on-failure

Log rotation won't happen on kernel panic
Merge pull request #3702 from chrisvest/2.2-prim-coll-eq

Equals and hashCode implementations for the primitive collections
Return no plan from expand/join if the subgraphs cannot be planned (i.e., they are not in the cache)