Added an inode object to keep track of all file descriptors open for a
given file.
Plugged a couple of potential file descriptor leaks.

diff --git a/server/sock.c b/server/sock.c
index 51d7ec7..6161d23 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -616,7 +616,7 @@
     sock->message = 0;
     sock->wparam  = 0;
     sock->deferred = NULL;
-    if (!(sock->fd = alloc_fd( &sock_fd_ops, sockfd, &sock->obj )))
+    if (!(sock->fd = create_anonymous_fd( &sock_fd_ops, sockfd, &sock->obj )))
     {
         release_object( sock );
         return NULL;
@@ -686,7 +686,7 @@
         if (sock->event) acceptsock->event = (struct event *)grab_object( sock->event );
         acceptsock->flags = sock->flags;
         acceptsock->deferred = 0;
-        if (!(acceptsock->fd = alloc_fd( &sock_fd_ops, acceptfd, &acceptsock->obj )))
+        if (!(acceptsock->fd = create_anonymous_fd( &sock_fd_ops, acceptfd, &acceptsock->obj )))
         {
             release_object( acceptsock );
             release_object( sock );