Use an in-memory cache until we need the target's

Instead of copying source or obtained creds into the target cache and
changing ownership if everything succeeds, copy them into a MEMORY:
cache and then, if everything succeeds, create the target cache as the
target user.
Try to use the default_ccache_name'd as the target

Try to use the location named by the default_ccache_name setting as the
target cache.  If it's a collection, just create or update a subsidiary
cache.  If it's not, then fall back to creating a new cache to try to
avoid destroying the contents of one that might already be there.  We
can't really detect this in advance for KEYRING: caches, though.
Be more careful of target ccache collections

When copying credentials to a cache collection, take care to avoid
generating multiple caches for a single client principal, but don't
change the primary out from anyone who might already be using the
target collection.
Pass a missing argument to fprintf()
Mark krb5_store_some/all_creds as static

Both krb5_store_some_creds and krb5_store_all_creds are only defined and
called from one source file, so mark them as static functions.
Remove "other" creds arrays, which are always NULL
Make show_credential static, too
Remove unused compare_creds() function
Remove a redundant copy of an argument pointer
Remove no-longer-used krb5_ccache_overwrite()
Removed no-longer-used krb5_find_princ_in_cache()
Fix minor memory leak
Copy config entries to the target ccache

When we try to screen out expired creds while reading them from one
ccache to eventually store in another, also keep configuration entries.
Update comments, fix a couple of typos