pluggable transports; move all HTTP code into HTTPTransport