FileDescriptor is getting out of control, and the layering isn't quite right so let's make a File class that everything can inherit from. Then we can stop worrying about all kinds of specifics in FileDescriptor.