More concise CSV header format for nodes and relationships

where header entries with semantic data, like node ids, relationship type
and labels must be specified with their corresponding types, no longer
relying in their position in the header. At the same time removed the need
for naming these columns.

Previously some header entries relied on position and some relied on type
being specified.

So, now a node header might look like:
:ID,name,:LABEL,year_of_birth:int

and a relationship header like:
:START_ID,:TYPE,:END_ID,some_property:String
Fixes unstable NetworkSenderReceiverTest

The test occasionally failed because of a race condition between
 sending a message from NetworkSender and stopping a NetworkReceiver
 instance. The test depended on the message sent to result in a
 ClosedChannelException which occasionally did not happen, because
 NetworkReceiver.stop() does not block waiting for all listening
 threads to exit. The result is that the message would be received
 and the expected exception would not happen.
The fix adds a retry loop that keeps sending messages until the
 exception manifests. Then it goes on to verify the actual
 functionality
Merge pull request #3401 from tinwelint/2.2-concise-csv-header

More concise CSV header format for nodes and relationships
Merge pull request #3403 from digitalstain/2.2-fix-networksenderreceivertest

Fixes unstable NetworkSenderReceiverTest
Adds -Dfile.encoding=UTF-8 to import JVMs
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)
Replace use of LongRegister with DoubleLongRegister in counts store
Add new type of IndexKey for storing sampling results
Refactored counts package

o CountsAcceptor is now called CountsAccessor and also has read methods
o CountsState => CountsRecordState
o IndexKey is now split into Index{Size|Sample}Key
o CountsTrackerState now uses explicit calls per key type
Support index samples in counts tracker
Implement index sampling
- initial index counts are computed during population
- index sampling is scheduled every 10 seconds