Plumb trailer passing through transport streams.

We purposefully avoid going through the (de)framer, since close()
behavior is specific to whether on client or server.
AbstractClientStream and AbstractServerStream handle mapping the events
to appropriate semantics, but require stashing status/trailer for later
use.

It was very interesting getting to a point where we could support the old
and new protocol; that is probably the most detailed-oriented portion of
the CL. There are some interface hacks going on, but those will
naturally be removed when we trash the gRPC v1 framer.
-------------
Created by MOE: http://code.google.com/p/moe-java
MOE_MIGRATED_REVID=76092186
diff --git a/core/src/main/java/com/google/net/stubby/newtransport/Deframer.java b/core/src/main/java/com/google/net/stubby/newtransport/Deframer.java
index 817ff94..dd7d80f 100644
--- a/core/src/main/java/com/google/net/stubby/newtransport/Deframer.java
+++ b/core/src/main/java/com/google/net/stubby/newtransport/Deframer.java
@@ -2,7 +2,6 @@
 
 import com.google.common.io.ByteStreams;
 import com.google.net.stubby.GrpcFramingUtil;
-import com.google.net.stubby.Metadata;
 import com.google.net.stubby.Operation;
 import com.google.net.stubby.Status;
 import com.google.net.stubby.transport.Transport;
@@ -23,13 +22,13 @@
    */
   private static final int LENGTH_NOT_SET = -1;
 
-  private final StreamListener target;
+  private final GrpcDeframer.Sink target;
   private boolean inFrame;
   private byte currentFlags;
   private int currentLength = LENGTH_NOT_SET;
   private boolean statusDelivered;
 
-  public Deframer(StreamListener target) {
+  public Deframer(GrpcDeframer.Sink target) {
     this.target = target;
   }
 
@@ -141,7 +140,8 @@
   }
 
   private void writeStatus(Status status) {
-    target.closed(status, new Metadata.Trailers());
+    target.statusRead(status);
+    target.endOfStream();
     statusDelivered = true;
   }