I've changed the design of fdesc to be mounted on /dev/fd
instead of being a union mount on /dev. Since we already
have the nodes that fdesc duplicates (std{in,out,err} and
tty), there's no reason to bloat and complicate the code by
reproducing them. The code itself looks clean, but there's
still the issue of making a unique inode number for each
file. This puts the code in a generally much more readable
state as well.