Execute savedata operations on a thread, notify of failure

This may help #3039.  It runs a separate thread to actually load/save data on, in all cases.  The only observable change in behavior should be that each auto savedata operation now takes an extra Update() call (which I'm pretty sure everything is supposed to take several.)

Also, it's possible to end up with a perfectly writable savedata directory, but a file inside that is read-only or owned by another user.  It's also possible to run out of disk and such.  I think we check for some of these situations at least, but before, we silently failed.  This now shows a message if saving/loading fails for any reason.  Could probably be improved (why did it fail?  testing that things do correctly fail, etc.)

-[Unknown]