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?
You are right. Fix it in 42b54ba .

About semantics of immediate task, we need to agree on what semantics does immediate task provide.
Under my opinion, the semantics of immediate task is that it take precedence over normal http task. It is an implementation detail that how this is guaranteed.