BookKeeper: Update JAR version to 4.2.6
Updating the latest version in master to match the version released with the distributed log

RB_ID=162081
BookKeeper: Local BookKeeper Cleanup
Local Bookkeeper should shutdown ZK if stopOnExit is specified

RB_ID=170166
BookKeeper: Local Bookie Journal and Ledger Paths
When config is specified for local bookies with journal and ledger directories - we should use the path and create subdirectories within the specified path for individual local bookie instance. This change fixes the path conflicts

RB_ID=170165
BookKeeper: ensemble change would fail with metadata version conflicts when bookie recovery modified ledger metadata.
(this is an issue reported in https://issues.apache.org/jira/browse/BOOKKEEPER-667, which also an issue in our branch)

- when ledger metadata is changed by Bookie Recovery(Auto/Manual), ensemble change would fill with MetadataVersionConflict exception. This fix is to address this case by improving the metdata conflicts resolve logic.

 BTW, also fix a findbug warning 'naked notify'.

RB_ID=172311
bookkeeper stats refactor

- move generic StatsLogger/StatsProvider interface to bookkeeper-stats package
  * change SimpleStat to Counter
  * add Gauge interface and registerGauge method.
  * move gauge based enums from BookkeeperServerCounter to BookkeeperServerGauge.
- move twitter-science implementation into bookkeeper-stats-providers package.
- allow client/server to specific which stats provider to load

RB_ID=198523
bookkeeper : add ostrich stats logger
- add ostrich stats logger

RB_ID=198851
bookkeeper : readonly ledger handle should watch ensemble change

RB_ID=231449
BookKeeper Client: Should specifically call out when read entry fails for ledger not existing
While in some cases the handling for NoSuchLedgerExists and NoSuchEntryExists maybe identical (such as read retry), let the caller decide how they want to differentiate these exceptions.

RB_ID=232727
- Fix metrics/opStatsLogger for LEDGER_DELETE, LEDGER_OPEN.

RB_ID=262881
BookKeeperClient: Reduce the noise in the INFO log output.
- Ledger metadata refresh
- Connection status (when connection will be retried)

RB_ID=268783
bookkeeper : TryReadLastConfirmed

- add TryReadLastConfirmed to read last confirmed without coverage checking.

RB_ID=234097
bookkeeper: LAC piggyback at read response

- bookie server changes
  * cache maximum lac in file info
  * provide getLastAddConfirmed & setLastAddConfirmed in ledger storage
  * addEntry will set its lac thru setLastAddConfirmed
  * readEntry will read latest lac and piggyback
- client change
  * check whether the response has lac piggybacked, if there is lac update lac in its corresponding ledger handle.

with minor fixes:
- fixed two test cases as this piggyback would change lac behavior.
- catch unexpected exception in write path and respond them as BADREQ asap.

RB_ID=234689
bookkeeper: zookeeper client wrapper to handle retries & session expires
- provide a zookeeper client wrapper for bookkeeper to handle retries & session expires
- added a test case for bookie watcher to ensure it works well after reconnects when session expires.

RB_ID=234787
bookkeeper: zookeeper client wrapper to handle retries & session expires (add missing change)

- provide a zookeeper client wrapper for bookkeeper to handle retries & session expires
- added a test case for bookie watcher to ensure it works well after reconnects when session expires.

RB_ID=234787
bookkeeper: Optimize ReadLAC when received notification when ledger is closed.

- optimize readLastAddConfirmed when received notification when ledger is closed, so we don't need to do actual read again.

RB_ID=266127
bookkeeper: handle zookeeper session expire in ensemble watcher

RB_ID=266129
bookkeeper: expose stats for zookeeper operations

- expose stats for zookeeper operations

RB_ID=266133
bookkeeper: add more stats on bookkeeper client

RB_ID=266135
bookkeeper recovery improvement (part-1): refactor PendingReadOp

this change is the first part of improving bookkeeper recovery. it is basically a refactor change, which:

- abstract an interface for LedgerEntryRequest in PendingReadOp
- rename current implementation to SequenceReadRequest, which read the entry in the sequence of quorum.

RB_ID=266137
bookkeeper recovery improvement (part-2): add a parallel reading request in PendingReadOp

- add a parallel reading request in PendingReadOp
- allow PendingReadOp to configure whether to do parallel reading or not
- add flag in ClientConfiguration to allow configuring whether to do parallel reading in LedgerRecoveryOp or not.

RB_ID=266139