Extract CookbookUpload::Archive

The original impetus for this came from Rubocop which admonished the
cyclomatic complexity of parse_tarball_metadata. However, there are some
nice consequences of this extraction regardless: we rely less on
exceptions for indicating error conditions, and have an abstraction on
top of libarchive that's a bit more Rubyesque.