Use twisted.web.client.Agent for download requests (use of HTTP/1.1)

Adds http11.HttpDownloadHandler in scrapy.core.downloader.handlers
Renamed downloader to Http11DownloadHandler and some refactoring

Only for HTTP, not HTTPS
Test on expected body length instead of request method (HEAD case)
Restore handling of HTTPS
http11 cleanup
add http connection pool and custom ssl context factory
enable persistent connections
move ssl context factory to its own module and implement a non-ssl version that warns about pyopenssl support
remove duplicate context factory handling for non-ssl support in http1.0
close pool connections before finishing tests
empty bodies does not require a body producer
adapt for singletons removals
cleanup http connection pool on engine stop
agents requires an instance of contextFactory