TS-1062: Extends and optimizes FetchSM

* Optimize FetchSM to support stream IO.
* Reduce memory copy in FetchSM.
* Expose some plugin APIs in 'ts/experimental.h'.

This patch will borrow some ideas from @Quehan's fetcher
library, which has not been open-sourced yet.

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>
TS-1062: Implement dechunk supporting for extended FetchSM

With this patch, we can let FetchSM to dechunk body content automatically
by passing 'TS_FETCH_FLAGS_DECHUNK' option to TSFetchCreate();

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>
TS-1062: Make TSFetchUrl handle chunked encoding automatically

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>
TS-2612: Indroduce TSHttpConnectWithProtoStack() API

1) Firstly, add a bitmask, *proto_stack*, in NetVConnection/HttpSM,
   and set it properly.

2) For some plugins that using TSHttpConnect() API to do request,
   the Logging module can't know what protocol stack is used, so I
   add a new API:

  TSHttpConnectWithProtoStack(struct sockaddr const* addr,
                             TSClientProtoStack proto_stack);

After introducing TSHttpConnectWithProtoStack() API, TSHttpConnect() API
would be a special case of it:

  TSVConn
  TSHttpConnect(sockaddr const* addr)
  {
    return TSHttpConnectWithProtoStack(addr, (1u << TS_PROTO_HTTP));
  }

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>
TS-2610: Add "client_protocol_stack"(%<cps>) field into LogFormat

The output of %<cps> field would be the conjunction of protocol names
in client protocol stack spliced with '+', such as "TLS+SPDY".

Signed-off-by: Yunkai Zhang <qiushu.zyk@taobao.com>