Refuctor send/recv funs

Factor out the common parts of fdsend/credsend and fdrecv/credrev
functions.
Use proplists for constants
Simplify msg/1
Support encode/decode of (c)msghdr

Have inverse functions for creating the cmsghdr and msghdr.

The functions are not correct yet:

* fdsend/recv is a tuple, credsend/recv is an atom

Should support an optional argument, since fdsend/recv default to 1
file descriptor.

* mismatched types in encode/decode

fdsend takes a list of integers, an integer or a binary encoding the
integers.

fdrecv takes an integer respresenting the number of fd's to return.

msg({fdrecv, N}) returns a list of integers.

msg(credrecv) returns a proplist.

* before receiving a credential, the caller must manually call
setsockopt/2 on the socket
Update the README

The gen_unix interface is still changing. The API is still not correct.
It also requires the caller to poll the socket, to manually make calls
to e.g., setsockopt/2 and to track state.

The plan is to rename gen_unix -> unixsock. unixsock will have the
socket primitives and will be a simple function interface.

gen_unix will be a gen_server. gen_unix will track the fd's, poll them
(either using inert or by sleeping and spinning on the socket) and close
the socket/delete the socket file on termination.