redis: Fix decoding nested multi-bulk replies

[Description imported from https://github.com/twitter/finagle/issues/216]

```scala
import java.nio.charset.Charset
import org.jboss.netty.buffer.ChannelBuffer
import org.jboss.netty.buffer.ChannelBuffers.wrappedBuffer
import com.twitter.util.{Future, Await}
import com.twitter.finagle.builder.ClientBuilder
import com.twitter.finagle.redis.protocol._
import com.twitter.finagle.redis.Redis

def s2buf(s: String): ChannelBuffer = wrappedBuffer(s.getBytes)
def buf2s(buf: ChannelBuffer): String = buf.toString(Charset.forName("utf8"))

def pretty(rep: Reply): String = rep match {
  case MBulkReply(msgs) => "MBulkReply(%s)" format (msgs map pretty)
  case BulkReply(msg)   => "BulkReply(%s)" format buf2s(msg)
  case x                => x.toString
}

val svc = (ClientBuilder()
  .hosts("localhost:6379")
  .hostConnectionLimit(1)
  .codec(Redis())
  .build
)
```

An `mget` command, which gives a multi-bulk reply:
```scala
Await.result(Future.collect(Seq(
  MGet(List(s2buf("a"), s2buf("b")))
) map svc)) map pretty foreach println
```

Output (correct):
```
MBulkReply(List(BulkReply(one), BulkReply(three)))
```

A transaction, which gives a multi-bulk reply:
```scala
Await.result(Future.collect(Seq(
  Strlen(s2buf("a")),
  MGet(List(s2buf("a"), s2buf("b"))),
  Strlen(s2buf("a"))
) map svc)) map pretty foreach println
```

Output (correct):
```
IntegerReply(3)
MBulkReply(List(BulkReply(one), BulkReply(three)))
IntegerReply(3)
```

An `mget` command within a transaction, which gives nested multi-bulk replies:
```scala
Await.result(Future.collect(Seq(
  Multi,
  Strlen(s2buf("a")),
  MGet(List(s2buf("a"), s2buf("b"))),
  Strlen(s2buf("a")),
  Exec
) map svc)) map pretty foreach println
```

Output (incorrect):
```
StatusReply(OK)
StatusReply(QUEUED)
StatusReply(QUEUED)
StatusReply(QUEUED)
MBulkReply(List(IntegerReply(3), BulkReply(one), BulkReply(three)))
```

Should be:
```
StatusReply(OK)
StatusReply(QUEUED)
StatusReply(QUEUED)
StatusReply(QUEUED)
MBulkReply(List(IntegerReply(3), MBulkReply(List(BulkReply(one), BulkReply(three))), IntegerReply(3)))
```

Here's what the raw reply from the server should look like:
```
$ (echo -en '*1\r\n$5\r\nmulti\r\n'; echo -en '*2\r\n$6\r\nstrlen\r\n$1\r\na\r\n'; echo -en '*3\r\n$4\r\nmget\r\n$1\r\na\r\n$1\r\nb\r\n'; echo -en '*2\r\n$6\r\nstrlen\r\n$1\r\na\r\n'; echo -en '*1\r\n$4\r\nexec\r\n'; sleep 1) | nc localhost 6379 --close
+OK
+QUEUED
+QUEUED
+QUEUED
*3
:3
*2
$3
one
$5
three
:3
```

I think the following case in `decodeMBulkLines` is the culprit, since it appears to be treating the `*2` as a continuation of the current multi-bulk reply and then ignoring the final `:3` reply entirely:
- https://github.com/twitter/finagle/blob/eaeb845/finagle-redis/src/main/scala/com/twitter/finagle/redis/protocol/Reply.scala#L158-L159