libgssh: Always wait in preauth

If USERAUTH_NONE were to succeed, we'd skip to AUTHENTICATED.  But
this is broken; the whole idea of waiting in preauth is to allow apps
to check the fingerprint.
Support public key authentication

This required a fairly substantial rework of the way authentication
works, and it's still not done.  We need to have a better display of
authentication types, progress, etc.