Stop using RuntimeError
RuntimeError is "unspecified error", and generally should be used only when we
don't know what happened and don't have a better error class to use. For the
cases where standard errors match, let's just use FileNotFoundError,
FileExistsError, and shutil.SpecialFileError. An additional class
FileIsModifiedError is defined, because none of the commonly used types match.
Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>