internal/charmstore: add ZipFileReader and NewZipFile

These are the methods we'll use to create the Content on entities.
I'd prefer to assume that people understand Go switch semantics.
Otherwise we'll be putting a break after each clause too :)