new async api

This change make sure we are reusing the request reference when handling
async reponses. Now an async stream is also managed by the
hackney_manager so we can detect when a request is async or not and
reuse the same API adn correclly close the async stream when the parent
die.

For performances reasons, messages are directly sent to the process
handling the async connection , only shutdowns are handled by the
hackney manager.

This change also preserve the memory by making sure that no message
passing is used when sending the request or stopping an async response.

fix #47