ENG-4893: Initialize the hashinator with existing partition count during join.

On elastic join, the new partitions do not contain any ranges at
first. Initialize the hashinators in Java and in EE with existing partitions
only.
ENG-4893: No need to update hashinator at the end of elastic stream snapshot.

Partitioned table data will be migrated later in a non-blocking fashion. The
stream snapshot only has to transfer the replicated table data and update the
partition counts stored on each site. As a consequence, there is no need to pass
the ranges of partitions around in the stream snapshot request.
ENG-4893: Update log messages in ElasticJoinProducer to be more accurate.
ENG-4893: Refactor SnapshotPredicates to include the table.

Include the table the predicates are associated with in SnapshotPredicates to
simplify the signature of SnasphotSiteProcessor.activateTableStreams().
ENG-4893: Bring back the dev null snapshot target for elastic index snapshot.
ENG-4893: Add a new type of snapshot for elastic join indexing.
ENG-4893: Make TheHashinator abstract methods public.

There are cases where temporary local hashinators need to be created. It's not
possible to use the local hashinator if these methods are protected.
ENG-4893: Add a helper method to watch for the completion of a snapshot.

The helper method takes the nonce of the snapshot and returns a
ListenableFuture. Caller can wait on the future for the completion of the
snapshot. The future will return the actual completion event as result.
ENG-4893: Add unit tests for IndexSnapshotWritePlan.
ENG-4893: Rename SnapshotFormat.isTableBased() to canCloseEarly() per Ariel's
review comment.
Merge pull request #640 from VoltDB/ENG-4893

ENG-4893: Transfer replicated table data and build elastic index