better default mkdir behavior, don't throw if directory exists, and better exception information for failed move/renames