Implement filesystem services, and the required kernel objects.

Unless there's a technical reason not to, I suggest changing the type of `mode` from a `u32` to something like

    union Mode {
        BitField<0, 1, u32> read_flag;
        BitField<1, 1, u32> write_flag;
        BitField<2, 1, u32> create_flag;
    };

The code usage would simplify to things like `if (mode.read_flag)`, which is a lot easier to read than having those magic numbers (the naming of which become only apparently when you look at the contents of the `if` branch).