Reduce some duplicate async read/write, and add comments.

And change the order of the functions in the order of their use.
Use hash map boost::unordered_map<> instead of std::map.
- To reserve 8192 bytes for std::string fHeader initially.
No need to close the socket, when async_connect failed.