SoupSocket: Move the creation of socket clients to a single place

Thus avoiding duplication of code in sync and async functions.
SoupSocket: Use the local socket, when available, even on client side.

This allows binding the client connection to a specific local address.
SoupConnection: added a new construction-time property "local-address"

It will be proxied to the SoupSocket upon its creation.
SoupSession: added a new construction-time property "local-address"

It will be proxied to the SoupConnection and then to SoupSocket,
allowing the user to specify a local address to bind the local socket.