A `GProxy` handles connecting to a remote host via a given type of proxy server.
It is implemented by the `gio-proxy` extension point. The extensions are named after their proxy protocol name. As an example, a SOCKS5
proxy implementation can be retrieved with the name `socks5` using the function [method@Gio.IOExtensionPoint.get_extension_by_name].
Given connection to communicate with a proxy (eg, a
SocketConnection that is connected to the proxy server), this does the
necessary handshake to connect to proxy_address, and if required, wraps the
IOStream to handle proxy payload.