Implement FilePackage class

This is another implementation of the Package class. And we will later
need it when reading the package from FUSE.

Bug: 127071893
Test: unit tests pass, sideload a file package on sailfish
Change-Id: I3de5d5ef60b29c8b73517d6de3498459d7d95975
diff --git a/package.h b/package.h
index 5eef9c9..cd44d10 100644
--- a/package.h
+++ b/package.h
@@ -32,6 +32,13 @@
 // interface for both packages loaded in memory and packages read from fd.
 class Package : public VerifierInterface {
  public:
+  static std::unique_ptr<Package> CreateMemoryPackage(
+      const std::string& path, const std::function<void(float)>& set_progress);
+  static std::unique_ptr<Package> CreateMemoryPackage(
+      std::vector<uint8_t> content, const std::function<void(float)>& set_progress);
+  static std::unique_ptr<Package> CreateFilePackage(const std::string& path,
+                                                    const std::function<void(float)>& set_progress);
+
   virtual ~Package() = default;
 
   // Opens the package as a zip file and returns the ZipArchiveHandle.
@@ -40,12 +47,6 @@
   // Updates the progress in fraction during package verification.
   void SetProgress(float progress) override;
 
-  static std::unique_ptr<Package> CreateMemoryPackage(
-      const std::string& path, const std::function<void(float)>& set_progress);
-
-  static std::unique_ptr<Package> CreateMemoryPackage(
-      std::vector<uint8_t> content, const std::function<void(float)>& set_progress);
-
  protected:
   // An optional function to update the progress.
   std::function<void(float)> set_progress_;