Update RAMCloud start-up procedure

This patch will enable RAMCloud coordinator failover and
server failover if number of replica is properly configured.

- Update onos.sh RAMCloud start-up procedure
  - Use ZooKeeper to manage cluster member
  - Specify cluster name, num replicas,...
  - WARN: ramcloud.coordinator.ip is now a configuration to specify listen address
  - Specify ZooKeeper address/ClusterName in RAMCloud client config (conf/ramcloud.conf)
    - Note: conf/ramcloud.conf ramcloud.coordinatorIp, etc. is no longer used for connection
  - Enable failure detector, which is required for fail-over feature
- Undocumented maintenance option "deldb" to remove:
  - RAMCloud coordination info in ZK
    - Note: ZooKeeper must be running in order to execute "./onos.sh rc-c deldb"
  - BackupData file created by RAMCloud Storage Server
- Update RAMCloud Java bindings
  - Expose API to specify RAMCloud ClusterName
  - Expose ClientExeption
  - Note: You need to run ./build-ramcloud-java-bindings.sh to update Java bindings
- Utility function to check if ZooKeeper is running
- Utility function to wait for ZooKeeper to start
- Modified kill-processes() to try killing process gracefully first then KILL
- Specify absolute path to pgrep/pkill
- Added "rc" to manipulate both server and coordinator

Change-Id: Ia8a282f81bf82810a4d000883611ce12f504bd16
diff --git a/src/main/cpp/edu_stanford_ramcloud_JRamCloud.cc b/src/main/cpp/edu_stanford_ramcloud_JRamCloud.cc
index f6cfea7..4b2ecd4 100644
--- a/src/main/cpp/edu_stanford_ramcloud_JRamCloud.cc
+++ b/src/main/cpp/edu_stanford_ramcloud_JRamCloud.cc
@@ -21,6 +21,7 @@
  * - Inner classes in JRamCloud.java should be moved out to be a separate
  *   stand alone class, to eliminate workaround 00024 signature in
  *   C methods.
+ * - Define and support some of ClientException sub-classes.
  *
  */
 
@@ -223,22 +224,27 @@
     } catch (InvalidObjectException& e) {                                      \
         createException(env, jRamCloud, "InvalidObjectException");             \
         return _returnValue;                                                   \
+    } catch (ClientException& e) {                                             \
+        createException(env, jRamCloud, "ClientException");                    \
+        return _returnValue;                                                   \
     }
 
 /*
  * Class:     edu_stanford_ramcloud_JRamCloud
  * Method:    connect
- * Signature: (Ljava/lang/String;)J
+ * Signature: (Ljava/lang/String;Ljava/lang/String;)J
  */
 JNIEXPORT jlong
 JNICALL Java_edu_stanford_ramcloud_JRamCloud_connect(JNIEnv *env,
                                jclass jRamCloud,
-                               jstring coordinatorLocator)
+                               jstring coordinatorLocator,
+                               jstring clusterName)
 {
     JStringGetter locator(env, coordinatorLocator);
+    JStringGetter cluster(env, clusterName);
     RamCloud* ramcloud = NULL;
     try {
-        ramcloud = new RamCloud(locator.string);
+        ramcloud = new RamCloud(locator.string, cluster.string);
     } EXCEPTION_CATCHER((jlong)(NULL));
     return reinterpret_cast<jlong>(ramcloud);
 }