ws: Add CockpitSshTransport which uses libssh

We'll migrate from our current sshpass + openssh client based
approach to libssh.

This doesn't use libgssh. libgssh unfortunately doesn't have a
pollable model (such as GPollableOutputStream and friends) which
is what we need to implement a CockpitTransport.

In addition the mechanism that it uses to do async work with
libssh (ie: eagain non-blocing based async) doesn't work well with
libssh 0.6.x upstream. Certain functions to make the corner cases
work are completely missing.

Lastly we need to authenticate in a thread, so we can support
kerberos (ie: GSSAPI). So implemented it this way in
CockpitSshTransport.
agent: Add cockpit_channel_get_generator() function

Returns a cached generator from the channel, which can be shared by
both implementations and the channel itself for efficiency.
web: Expose channel close options in Channel.on("close")

Instead of having a reason argument to the event, there's now the
full options, so handlers can access any field of the close message.
This is symettrical with the Channel(@options) constructor.

In addition accept @options instead of a @reason in Channel.close()
common: Add cockpit_pipe_spawn() function to create process pipe

This is more general than cockpit_pipe_transport_spawn(). Once we
migrate to libssh then cockpit_pipe_transpown_spawn() should be
rewritten to use cockpit_pipe_spawn().

Since we'd like to use this as a cockpit_pipe_transport_spawn()
constructor, allow passing the gtype. In theory we would make all
these arguments be constructor arguments of CockpitPipe and then
pass it all in that way. But man that's tiring and less readable.
WIP host key

WIP ongoing

WIP