Split protobuf into its own project

We don't want core to depend on protobuf.
diff --git a/core/build.gradle b/core/build.gradle
index 4b2e196..30bf385 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -5,8 +5,7 @@
 description = 'gRPC: Core'
 
 dependencies {
-    compile libraries.protobuf,
-            libraries.guava,
+    compile libraries.guava,
             libraries.jsr305
 }
 
diff --git a/core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java b/core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java
deleted file mode 100644
index dbdc829..0000000
--- a/core/src/main/java/io/grpc/proto/DeferredProtoInputStream.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2014, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *    * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- *    * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package io.grpc.proto;
-
-import com.google.common.io.ByteStreams;
-import com.google.protobuf.CodedOutputStream;
-import com.google.protobuf.MessageLite;
-
-import io.grpc.DeferredInputStream;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-import javax.annotation.Nullable;
-
-/**
- * Implementation of {@link io.grpc.DeferredInputStream} backed by a protobuf.
- */
-public class DeferredProtoInputStream extends DeferredInputStream<MessageLite> {
-
-  // DeferredProtoInputStream is first initialized with a *message*. *partial* is initially null.
-  // Once there has been a read operation on this stream, *message* is serialized to *partial* and
-  // set to null.
-  @Nullable private MessageLite message;
-  @Nullable private ByteArrayInputStream partial;
-
-  public DeferredProtoInputStream(MessageLite message) {
-    this.message = message;
-  }
-
-  /**
-   * Returns the original protobuf message. Returns null after this stream has been read.
-   */
-  @Override
-  @Nullable
-  public MessageLite getDeferred() {
-    return message;
-  }
-
-  @Override
-  public int flushTo(OutputStream target) throws IOException {
-    int written;
-    if (message != null) {
-      written = message.getSerializedSize();
-      message.writeTo(target);
-      message = null;
-    } else {
-      written = (int) ByteStreams.copy(partial, target);
-      partial = null;
-    }
-    return written;
-  }
-
-  @Override
-  public int read() throws IOException {
-    if (message != null) {
-      partial = new ByteArrayInputStream(message.toByteArray());
-      message = null;
-    }
-    if (partial != null) {
-      return partial.read();
-    }
-    return -1;
-  }
-
-  @Override
-  public int read(byte[] b, int off, int len) throws IOException {
-    if (message != null) {
-      int size = message.getSerializedSize();
-      if (size == 0) {
-        message = null;
-        partial = null;
-        return -1;
-      }
-      if (len >= size) {
-        // This is the only case that is zero-copy.
-        CodedOutputStream stream = CodedOutputStream.newInstance(b, off, size);
-        message.writeTo(stream);
-        stream.flush();
-        stream.checkNoSpaceLeft();
-
-        message = null;
-        partial = null;
-        return size;
-      }
-
-      partial = new ByteArrayInputStream(message.toByteArray());
-      message = null;
-    }
-    if (partial != null) {
-      return partial.read(b, off, len);
-    }
-    return -1;
-  }
-
-  @Override
-  public int available() throws IOException {
-    if (message != null) {
-      return message.getSerializedSize();
-    } else if (partial != null) {
-      return partial.available();
-    }
-    return 0;
-  }
-}
diff --git a/core/src/main/java/io/grpc/proto/ProtoUtils.java b/core/src/main/java/io/grpc/proto/ProtoUtils.java
deleted file mode 100644
index d638d5e..0000000
--- a/core/src/main/java/io/grpc/proto/ProtoUtils.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright 2014, Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *    * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- *    * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-package io.grpc.proto;
-
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.google.protobuf.Message;
-import com.google.protobuf.MessageLite;
-import com.google.protobuf.Parser;
-
-import io.grpc.Marshaller;
-import io.grpc.Metadata;
-import io.grpc.Status;
-
-import java.io.InputStream;
-
-/**
- * Utility methods for using protobuf with grpc.
- */
-public class ProtoUtils {
-
-  /** Adapt a {@code Parser} to a {@code Marshaller}. */
-  public static <T extends MessageLite> Marshaller<T> marshaller(final Parser<T> parser) {
-    return new Marshaller<T>() {
-      @Override
-      public InputStream stream(T value) {
-        return new DeferredProtoInputStream(value);
-      }
-
-      @Override
-      public T parse(InputStream stream) {
-        try {
-          return parser.parseFrom(stream);
-        } catch (InvalidProtocolBufferException ipbe) {
-          throw Status.INTERNAL.withDescription("Invalid protobuf byte sequence")
-            .withCause(ipbe).asRuntimeException();
-        }
-      }
-    };
-  }
-
-  /**
-   * Produce a metadata key for a generated protobuf type.
-   */
-  public static <T extends Message> Metadata.Key<T> keyForProto(final T instance) {
-    return Metadata.Key.of(
-        instance.getDescriptorForType().getFullName() + Metadata.BINARY_HEADER_SUFFIX,
-        new Metadata.BinaryMarshaller<T>() {
-          @Override
-          public byte[] toBytes(T value) {
-            return value.toByteArray();
-          }
-
-          @Override
-          @SuppressWarnings("unchecked")
-          public T parseBytes(byte[] serialized) {
-            try {
-              return (T) instance.getParserForType().parseFrom(serialized);
-            } catch (InvalidProtocolBufferException ipbe) {
-              throw new IllegalArgumentException(ipbe);
-            }
-          }
-        });
-  }
-
-  private ProtoUtils() {
-  }
-}