Add custom error formatting (err_fmt config param)

    Add [libdefaults] err_fmt, a parameter for additional formatting of
    error messages.  %C gets substituted with the numeric error code.
    %M gets substituted with the original error message.

    For example:

        [libdefaults]
                err_fmt = %M (http://docs.foo.example/krb5/errors/%C)

    will produce errors like:

        Cannot find KDC for realm "FOO.EXAMPLE" (http://docs.foo.example/krb5/errors/-1765328230)
Use krb5_prepend_error_message2() in LDAP KDB
Include file ccache name in error messages

Also changed the interpretation of errnos as follows:

 - EPERM and EACCESS obviously should map to KRB5_FCC_PERM, not
   KRB5_FCC_NOFILE.

 - ENAMETOOLONG is clearly not an internal error, since the name must
   have come from an external source (the calling app, the environment),
   and most closely corresponds to KRB5_FCC_NOFILE (since it could not
   be opened, it can't exist[*]).

   [*] Well, if could be opened by chdir()ing into successive path
       component directories (not thread-safe), or by using openat()
       (less portable).  But it's best to not do this; the file just
       does not exist.

 - EROFS clearly corresponsds best to KRB5_FCC_PERM -- permission to
   write was denied, after all.

 - EISDIR, ENOTDIR, and ELOOP also best map to KRB5_FCC_NOFILE: the file
   couldn't exist as a regular file, therefore it's as if it didn't
   exist.

 - EBUSY should map to KRB5_CC_IO.

 - EEXIST should really be handled in open_cache_file() when O_CREAT |
   O_EXCL are set.

 - ETXTBSY just doesn't belong.  But since it had been there, I figured
   I'd map it to KRB5_CC_IO as that seems best.
Test err_fmt