def watch_file(path, *flags, &callback)
      Watcher::File.new(self, path, flags, callback)
    end
def watch_file(path, *flags, &callback)
      Watcher::File.new(self, path, flags, callback)
    end
Watches a file or directory for changes.
 The `flags` parameter specifies which changes
 will fire events.

 The {Event#flags} field contains the changes that caused the event to be fired.
 {Event#data} and {Event#eof?} are unused.

 Note that this only watches a single file.
 If the file is a direcotry,
 it will only report changes to the directory itself,
 not to any files within the directory.

 ## Flags

 `:delete`
 : The file was deleted.

 `:write`
 : The file was modified.

 `:extend`
 : The size of the file increased.

 `:attrib`
 : Attributes of the file, such as timestamp or permissions, changed.

 `:link`
 : The link count of the file changed.

 `:rename`
 : The file was renamed.

 `:revoke`
 : Access to the file was revoked,
   either via the `revoke(2)` system call
   or because the underlying filesystem was unmounted.

 @param path [String] The path to the file or directory.
 @param flags [Array<Symbol>] Which events to watch for.
 @yield [event] A block that will be run when the file changes.
 @yieldparam event [Event] The Event object containing information
   about the event that occurred.
 @return [Watcher] The Watcher for this event.
 @raise [SystemCallError] If something goes wrong when registering the Watcher.