Work on decrypting other storages and streams

Change copy() and decrypt() so they can process any streams, which
will be useful when we're recursively copying directory structures.
Support for recursively decrypting storages

Some storages are encrypted. In decrypt_file we loop through the top
level of the file looking to see if the entries are storages (i.e.
subdirectories). We also check if each entry should be decrypted.

For each storage, copy_or_decrypt_tree is called. This works very
similarly to decrypt_file except it does not check the names of the
children to see whether they should be decrypted.
Move declarations of infile and outfile from global to decrypt_file()