Fix SO_PASSCRED syscall usage.

This was the cause of a lot of trouble - the SO_PASSCRED syscall
option parameter needs to be a non-zero integer, but the original
code imported had a ptr to the cred structure in it.

How did I spot this? Well, I enabled valgrind and it complained
that optval was used uninitialized in the syscall. After I
initialized it, stuff broke, at which point I realized that
this was the whole wrong parameter to begin with.

Now that that is sorted out, we can abstract identify_client()
better and put most of the hard work in there entirely and
have the code directly pull cred data in to the client
struct.