Inotify

I think I could fix an inotify issue - https://code.google.com/p/go/issues/detail?id=2483
see https://github.com/chamaken/inotify
And then I am glad if I can backport it to your fsnotify. Would you review the patchs?

> If I am watching a directory, and delete it, and recreate it, 
  and watch it again, any events after that are hosed:
> * the event.Name is incomplete, with the path stripped out e.g. 
    instead of /home/myname/a/b/c/d.txt, I get /d.txt
    instead of /home/myname/a/b/c/, I get ""
> * RemoveWatch fails with message: invalid argument
> * Close() doesn't really close. Most times, the reader goroutine hangs.

So you know though readEvents() blocks so that we need to break it to close gracefully.
epoll can be used which descriptor can be handled from which it was registerd.

I introduced epoll and os.Pipe() just notifying to epoll that watcher.Close() method is called. 
The flow is - watcher.Close() send bool through watcher.done channel, inline go routine receives it and closes the pipe, then epoll notices the pipe is closed and breaks loop, returns.  

Introducing epoll seems overdoing but I could not find more better way, sorry.