etcd: make cmd a protobuf type

@unihorn @bmizerany 
V2 store does not support binary value. I am not going to change this for now, so value is still a string type.
```protobuf
message cmd {
	required int32  type       = 1 [(gogoproto.nullable) = false];
	required string key        = 2 [(gogoproto.nullable) = false];
	optional string value      = 3;
	optional string prevValue  = 4;
	optional uint64 prevIndex  = 5;
	optional bool   dir        = 6;
	optional bool   recursive  = 7;
	optional bool   unique     = 8;
    optional bool   sorted     = 9;
	optional bytes  time       = 10;
}
```

We need to manually encode/decode time to/from bytes, since protobuf does not support go time type.  
@bmizerany We marshal the time in the server, since protobut does not support time type. It is not a user input. 
The marshal function can never fail. It returns an error just for implementing a interface. 
http://golang.org/src/pkg/time/time.go?s=24428:24473#L835