Added PosixAttrib and Link (symbolic link target) to TJclCompressionItem.
TJclCompressArchive.AddDirectory sets the new item's "Directory" property now.
Improved 7-zip error handling and header translation:

Where possible sevenzip.pas uses safecall instead of HRESULT/stdcall in order to provide exception safety.  Previously, if a callback raised an exception it would get into the 7-zip DLL code and kill the worker thread, handing the operation.  Now exceptions will go through TJclSafecallInterfacedObject.SafeCallException and be converted into an HRESULT.  In the rare cases where something other than S_OK should be returned the return values are documented and the relevant calls in JclCompression have their own try..except block.  These changes do mean that something other than EJclCompressionError will be raised more often, but the resulting error message can also be better.

Switched various pointers into out references and some Integer arguments to LongBool to clean up their usage and make it clear that certain things aren't optional.

Also simplified some QueryInterface calls using language features and fixed a range check error in SevenzipCheck.
Fixed archive corruption when an update fails

If an exception is raised in TJclSevenzipUpdateArchive.Compress it now reverts the archive volumes to the original state instead of allowing the "inherited Compress" call to replace the files.  The previous behavior could overwrite a valid archive with an empty one if an error occurred.
Added TJclCompressionArchive.OnOpenPassword event that notifies the owner when 7-zip asks for the password when opening an archive. This allows the user to open archives with encrypted filenames without prompting for a password unless it's needed.
Fixed reading split 7-zip archives.

- TJclSplitStream.Read had a bug that kept it from reading as much data as requested.
- TJclSplitStream.Seek didn't update FVolumePosition when seeking to the next volume failed, which meant seeking to the end and then back to the beginning didn't work.
- TJclSplitStream.InternalLoadVolume's change was just to keep it from calling GetVolumeMaxSize if GetVolume failed.
- TJclCompressionArchive.NeedStreamMaxSize's change supports reading volumes with non-uniform sizes as long as the volumes are added manually.  FVolumeMaxSize is no longer changed when calling OnVolumeMaxSize, since the individual volume's VolumeMaxSize has already been set to that when the volume object was created.

These changes work as long as the calling code uses AddVolume explicitly to add the remaining volumes after creating TJclCompressionArchive, rather than relying on VolumeFileNameMask.  Making it work with VolumeFileNameMask automatically would involve much more extensive changes in JclCompression that could introduce issues with compressing to split volumes, so I've left that for later.
Switched IInArchive.Open back to an HRESULT function instead of safecall, since safecall doesn't raise an exception for an S_FALSE return value.  Added a new exception type for S_FALSE so it's possible to detect that and handle archive open failures differently (e.g., if a file isn't handled by the current archive class).
Merge branch 'sevenzip_error_handling' of git://github.com/boramis/jcl into boramis-sevenzip_error_handling
Moved StrUtils Uses to implementation as suggested by OBones
Merge branch 'boramis-sevenzip_error_handling'