_extractZipEntry(archive, directory, entry) {
        if(!archive.files[entry].dir) {
            let file = path.join(directory, entry);
            this._logger.verbose('Extracting:', file);
            return fs.ensureDir(path.dirname(file))
                .then(() => archive.files[entry].async('uint8array'))
                .then(data => fs.writeFile(file, data));
        } else {
            return Promise.resolve();
        }
    }
Extract an entry from an archive to the given directory
and resolve a promise with the path to the extracted file.
@param {JSZip} archive
@param {string} directory
@param {string} entry
@returns {Promise<void>} A promise that will resolve on success, otherwise reject with a related error