refactor: add struct inode_operations + VFS dispatch with fallback
Infrastructure for separating file_operations (per-fd I/O) from
inode_operations (namespace/metadata):
- fs.h: added struct inode_operations with lookup, readdir, create,
mkdir, unlink, rmdir, rename, truncate, link callbacks
- fs.h: added i_ops pointer to fs_node_t alongside existing f_ops
- fs.c: VFS dispatch checks i_ops first, falls back to f_ops for
all namespace operations (lookup, create, mkdir, unlink, rmdir,
rename, truncate, link)
- syscall.c: getdents dispatch checks i_ops->readdir first
This is backward-compatible: all existing filesystems continue to
work through the f_ops fallback path. Each FS will be migrated
individually in subsequent commits.