Add zip file options

Handle zip files just like tarballs
Split the extraction process into two separate classes for clarity.