rewrite http module while preserve compatibility

In #7192, I mentioned that several problems in HttpClient.

Poor quality of origin code makes me difficult to fix it, so I rewrite it.
Curl related part is untouched.

The core difference between two versions of HttpClient is that:
Now HttpClient{s} are instances to hold states instead of a static object to export interfaces.
So, it is possible to write an interface `static void HttpClient* newInstance();` in HttpClient, to get different HttpClients for customization.

PS:
After rebase to tip of v3, cocos2d-x is failed to build. 
Some errors:
clang: error: no such file or directory: '/Users/kezhuw/Sources/cocos2d-x/external/Box2D/Dynamics/Joints/b2WeldJoint.cpp'

'google/protobuf/stubs/common.h' file not found.

I am not a cocos2d-x guy, even toy project. How to fix it?
The client instance is retained here, where to release it?