cypher performance enhancements

rewrote pathimpl
replaced Iterator() with Iterator.empty
replaced List() with List.empty
replaced Seq() with Nil
replaced seq.size with alternative predicates
Fixes a rare test timing issue

Multiple threads tried modifying the same unsynchronized ArrayList. This
created a race condition seen on certain machines/OSes in rare occasions.
Refactored to have an internal class for the thread, each instance having
a volatile field with the result instead.
Introduces pseudo quorum writes, moves to synthetic instance ids and fixes concurrent instance startup

Moved from URI as instance identification to an InstanceId class that is based
 on an Integer. Moved server_id from HaSettings to ClusterSettings.
Network instance accepts only one listener and has no need for receiverExecutor
MessageProcessors now form a pipeline that allows for stopping messages
 from going through, via a returned boolean status flag.
Cluster joining has changed. Now a majority of instances need to be reachable
 before the cluster is formed. Also a lot of bugs have been fixed around
 concurrent instance startup.
Renamed ClusterMemberListener.masterIsElected() to
 ClusterMemberListener.coordinatorIsElected()
Adds ClusterMemberListener.memberIsFailed and memberIsAlive()
Fixes in ProposerState. Patches pending instances with the correct set of acceptors
 if cluster configuration changes happen, stop timing out propose on phase1 failures.
AtomicBroadcastState no longer explicitly retries on timeout - it simply
 waits for propose to complete.
Cluster joining can now be explicitly denied via a new joinDenied message.
 That is used for shutting out instances that have a serverId in use.
Adds HeartbeatContextTest and a slight fix in HeartbeatContext revealed by testing
In HA, HAMSM now takes care of receiving memberIsFailed and memberIsAlive events and
 broadcasts PENDING state or does election, respectively, when there is no more quorum

Authored by Rickard Oberg and Chris Gioran
Test cleanup

Moves TestMasterElection into TestPaxosClusterEvents
TestPaxosClusterEvents uses ClusterManager as it should
ClusterManager implements Lifecycle.shutdown(), as it should
ConcurrentInstanceStartupIT uses 3 instances, takes less time and
 less likely to fail
HighAvailabilitySlavesIT properly shuts down ClusterManager
Test cleanup, moves TestItAll master to slave propagation to TestPaxosClusterEvents
Test cleanup and fixes

Removes RobustnessIT, not useful anymore, simulates cronies
Renames TestPaxosClusterEvents to TestBasicHaOperations, more descriptive
TestInstanceJoin and DeletionTest properly wait for all instances before forming a cluster
Fixes cluster forming quorum and some tests

Cluster formation now is actually waited upon until a majority of instances
 is present.
Refactors ClusterManager to properly start databases in separate threads
 so that blocking when waiting for cluster to form does not make tests hang.
Makes ha.initial_hosts setting mandatory and fixes tests that missed it
Reenables commented out InstanceIdTest
Adds mandatory initial_hosts in ForeignStoreIdIT setup code
More fixes around concurrent startup, fixes enterprise server tests
Adding support for now('ms')
Changed now('ms') to timestamp()
Test fixes in cluster

Fixes timing in InstanceIdTest
Ignores and comments on a ClusterMembershipTest
Rename classes in server java rest example to make it less confusing.
Adds debugging output for test start and end in HaBeanIT, fixes slightly LoggerRule
Readds test-logback.xml
Merge pull request #665 from tinwelint/fix-flappy-get-or-create-test

Fixes a rare test timing issue
Merge pull request #660 from systay/timestamp

Adds timestamp()
cypher performance part2

especially around paths
taking collection types into account
taking PathImpl into account
using Array to build up the node and rel collections in PathImpl
using collections.mutable.OpenHashMap in MutableMaps
Merge pull request #654 from jexp/cypher-performance

cypher performance enhancements
Temporarily ignore test in HaBeanIT pending investigation