Implement distributed caching for Bazel

This patch implements distributed caching for Bazel using Hazelcast.
Hazelcast is used as a key value store that stores content of files
indexed by the digest of the file. The cache also stores the list of files
for an action. The key in this case is the digest from the key of the action
and the list of files.

In this change I also added the interface for remote execution. The
implementation will be added in a subsequent patch.

This change is only the first in a series of changes related to distributed
caching and remote execution. I plan to revise the APIs and implementation
in subsequent changes.

--
Change-Id: I569285d6149a4e9f8ba2362682c07a9f1e1943b7
Reviewed-on: https://bazel-review.googlesource.com/#/c/2760/
MOS_MIGRATED_REVID=114325038
diff --git a/src/main/java/com/google/devtools/build/lib/remote/RemoteOptions.java b/src/main/java/com/google/devtools/build/lib/remote/RemoteOptions.java
new file mode 100644
index 0000000..933b2b1
--- /dev/null
+++ b/src/main/java/com/google/devtools/build/lib/remote/RemoteOptions.java
@@ -0,0 +1,39 @@
+// Copyright 2016 The Bazel Authors. All rights reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.devtools.build.lib.remote;
+
+import com.google.devtools.common.options.Option;
+import com.google.devtools.common.options.OptionsBase;
+
+/**
+ * Options for remote execution and distributed caching.
+ */
+public final class RemoteOptions extends OptionsBase {
+  @Option(
+    name = "hazelcast_node",
+    defaultValue = "null",
+    category = "remote",
+    help = "A comma separated list of hostnames of hazelcast nodes. For client mode only."
+  )
+  public String hazelcastNode;
+
+  @Option(
+    name = "rest_worker_url",
+    defaultValue = "null",
+    category = "remote",
+    help = "URL for the REST worker."
+  )
+  public String restWorkerUrl;
+}