[RFC] server: Improve error reporting.

Currently, if nvim fails to bind to the address `$NVIM_LISTEN_ADDRESS`, it will always message the user "invalid argument", which does not help diagnose the problem. With these changes, we can differentiate between the address being in use, the user lacking permissions, or even the parent directory not existing. 

Perhaps that last one is unnecessary, but I find getting "permission denied" a little disconcerting when it's not a permissions issue.
FUNC_ATTR_NONNULL_ALL ?