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?
Is the semantic of immediate task different from the original one?
The original semantic is to create another separate thread to process the http request.