common: Add 'problem' property to CockpitPipe

This can be used to retrieve the problem that the pipe closed
with, or NULL. But more importantly, it can be used to construct
a CockpitPipe for a failure.

Since CockpitPipe guarantees that it won't fire it's close
signals until the main loop, we follow that same guarantee
here with the "problem" property on construct.
ws: Allow CockpitCreds to be used as hash table key
ws: Run PAM authentication in cockpit-session process

The PAM modules are not necessarily thread-safe. In addition we
really want to run the 'auth' and 'session' stacks in the same
process, so later work with reauthorizing the agent can kick in.

This means sharing a cockpit-session process between the CockpitAuth
code and webservice code.

cockpit-session now accepts a '-p FD' argument, which tells it to
read a password from that FD, authenticate, and return the results
back on the same FD.

In the future we'll also want cockpit-session to return any kerberos
TGT it got during opening the session back to cockpit-ws, so we can
use store that TGT in the user's credentials, and use it to connect
to other servers.

Unfortunately we cannot use CockpitPipe to start the process in
CockpitAuth because of the way that CockpitWebServer runs handlers in
different threads (for now). So implement a simple work around and
create the CockpitPipe once in the websocket thread.

Closes #509
ws: Fix use after free in CockpitSshTransport

Caught by Valgrind and Travis CI