Simplies logic to just use nearest parent as the base instead of
traversing downwards. This reduces some redundancy, however fixes a bug
with repeated components in the constructed path and also improves
performance by skipping a loop altogether.
Also fixes recursive extraction tests failing `pandoc_soft_links.zip`.
* Added `ZipEntry:getSafePath` which returns the path of the entry if it
was safe, or nil
* Added `ZipEntry:sanitizePath` which converts a potentially unsafe path
to a safe one, although it can change the meaning of the paths
* Updated path utility with functions `isSafe` and `sanitize`
* Path utility now always uses `/` as a path separator, converting `\\`
to `/` when needed
* Included tests for path utility
* Added new extraction option: `followSymlinks`
* Added method for querying whether an entry is a symlink using
`ZipEntry:isSymlink`
* Include tests for symlinks