Add MOSDClientSubOp and MOSDClientSubOpReply

Add the two new message type and change the corresponding code flow as well.

Basically the idea to have MOSDClientSubOp is to seperate Client subop(read/write)
out of other subop(pull/push,etc), so that we can cleanup some unused fields in
the message type, then save some encoding/decoding overhead

Signed-off-by: Xiaoxi Chen <xiaoxi.chen@intel.com>
and drop .shard here.. it was this way in the old message just because the pg_t::shard member was added later