Streaming API

This completely changes the API to be streaming rather than take a file name for the tar side.

It doesn't make sense to change the other side to be "pipeable" because there isn't actually a standard representation for a "directory" stream.

I'll wait for someone to review this.

/cc @robertkowalski @jkroso