Fix bug in EphemeralFileSystem

When you write beyond the end of a file, the space in between is filled with zeros.
The EphemeralFileSystemAbstraction had insufficient synchronisation in that code, because it allowed
a thread to do a write beyond the end of the file, then another thread would write in the space in
between, and then the first thread would overwrite the new data with zeros.

During the course of debugging this, the PageCacheMonitor has been extended to also observe page
flushes.

Conflicts:
	community/io/src/main/java/org/neo4j/io/pagecache/PageCacheMonitor.java
	community/io/src/main/java/org/neo4j/io/pagecache/impl/common/SingleFilePageSwapper.java
	community/io/src/main/java/org/neo4j/io/pagecache/impl/standard/ClockSweepPageTable.java
	community/io/src/main/java/org/neo4j/io/pagecache/impl/standard/StandardPinnablePage.java
	community/io/src/test/java/org/neo4j/io/pagecache/CountingPageCacheMonitor.java
	community/io/src/test/java/org/neo4j/io/pagecache/PageCacheTest.java
	community/io/src/test/java/org/neo4j/io/pagecache/RecordingPageCacheMonitor.java
	enterprise/enterprise-io/src/main/java/org/neo4j/io/enterprise/pagecache/impl/muninn/MuninnPage.java
	enterprise/enterprise-io/src/main/java/org/neo4j/io/enterprise/pagecache/impl/muninn/MuninnPagedFile.java
Swap forseti clients over to using primitive maps.

Replace Forseti clients usage of regular hashmaps with hopscotch primitive
maps for tracking local lock counts. This makes a large section of the forseti
hot path GC free.

Also includes the optimization from RecordChanges where we allocate a new map
if the existing map has gotten larger than 32 entries.
Merge pull request #3404 from chrisvest/2.1-ephemeral-fsa-threadsafe-backport

Fix bug in EphemeralFileSystem
Merge remote-tracking branch 'upstream/2.1-maint' into merge-2.1-to-master
Merge pull request #3409 from lutovich/merge-2.1-to-master

(2.1)-[:MERGE]->(2.2)
Fixed recently introduced issue in Args#asMap()
imports
Fix CompatibilityPlanDescription toString
Merge pull request #3408 from jakewins/2.1-forseti-gc

Swap forseti clients over to using primitive maps.
Merge branch '2.1-maint'

Conflicts:
	enterprise/ha/src/main/java/org/neo4j/kernel/ha/lock/forseti/ForsetiClient.java
Expose a way to ask a lucene index to sample index selectivity

o Scan a sample of index entries and compute uniqueSampledValues / sampleSize
Add a new CountsKey for index entry counts
Maintain index update counts from index proxies

o OnlineIndexProxy will ensure that the index counts are updated
o Fix bug when generate LazyIndexUpdates to never construct 'overlapping updates'
o Cleanup code in LazyIndexUpdates
o Make sure we update index update counts during population
Add minor version to CountsStore such that we can flush safely on index flip (outside of log rotation)

o Ensure we compare CountsKeys correctly by type
o Fix reading of index keys
o Add flushIndexCounts() to IndexStoreView
Remove index counts when dropping an index
Make index stats part of SchemaRead and add indexNumberOfEntries

Rationale: For planning to be sane, indices shouldn't appear or disappear out of nowhere, hence we need to be tied to the schema read lock
Add IndexStatisticsTest
Pass on transaction id to index updaters
Pull out and refactor IndexCountVisitor from CountingIndexUpdater
Only apply index count updates for unprocessed transactions during recovery

o Rename updateXYZ to incrementXYZ CountsStore related methods
o Push transactionId down to IndexUpdaters (and couple them to process only updates for a single transaction)