Implement filesystem services, and the required kernel objects.

Fyi, C++ allows initializing unions by their first declared element. Not sure if we want to assume that everyone knows this when reading the source, though. @bunnei ? :p