!fixup to length handling for unix socket names

1. return number of bytes actually written
2. don't require input buffer to be one larger than needed for
abstract sockets

1 and 2 are bugs

3. on failure, tell caller how much space they should have allocated, so
they don't have to a loop with larger and larger buffers until they get
success

this is just a nice-to-have, normally, there is some kind of fixed max
path length people use, so maybe its a tiny thing. but its so easy, and
makes apis so much nicer to use

(Also, added more docs)