protobuffers know what files they will generate for zips/jars.

Preliminary support for compressed archives as sources. Currently .zips and .jars work for protobuffers. Code is fairly extensible, with generic functionality in zipped_sources such that not much code is needed in protobuf_gen (or other targets in the future).
In the normal case this reads funny.  How can we express that a normal or zipped file is passed?  maybe a better name?   Maybe address it using the full package name?

brainstorming below:

sources_util.reader() == returns an object you can ask questions about.  How many files? What kind of sources is this?
sources_util.reader().get_input_streams() == returns a generator what read_sources() does.
sources_util.reader().extract_to_file() == what expand_sources() does.

sources_util will hide what kind of decompression/dearchive (if any) we can add in there.