Re-invent FS.VFS.Open()

Handle the path traversal and symbolic links in VFS.Open(). For each
path component, query the file type (directory, regular file, or
symbolic link) from the FS driver and act accordingly.
diff --git a/src/filo-fs-ext2.ads b/src/filo-fs-ext2.ads
index a12c50d..2c30e0a 100644
--- a/src/filo-fs-ext2.ads
+++ b/src/filo-fs-ext2.ads
@@ -18,10 +18,12 @@
    procedure Open
      (State       : in out T;
       File_Len    :    out File_Length;
-      File_Path   : in     String;
+      File_Type   :    out FS.File_Type;
+      File_Name   : in     String;
+      In_Root     : in     Boolean;
       Success     : out    Boolean)
    with
-      Pre => Is_Mounted (State) and not Is_Open (State),
+      Pre => Is_Mounted (State),
       Post => Success = Is_Open (State);
 
    procedure Close (State : in out T)