The constructor should accept filenames with the .zip, .gzip and .lzma and .7z extensions.
When the filename is passed to the constructor, the library should attempt to look for an existing (already un-archived) file and if it's not present, unarchive and place it in the same directory as the archive only without the archive extension. If it is present, then it's read as usual.