Add Support for Unpacking from Streams.

It's lacking a little polish but I thought I'd get this out to get comments and make sure I wouldn't just drop the work in progress. This adds support to unpack streams. My use case was that I wanted to download and unpack compressed files without having to write the compressed file to disk and clean up afterwards. 

It's a bit awkward for zipfile since everything needs to be buffered in memory before we can unpack. Maybe I can make revert some of the changes so that a unzipping from a file doesn't load the thing in memory before calling in to the UnzipStream. 
UnpackStream