Watchers monitor for a single sort of event, specified by the specific subclass and its parameters. A watcher is usually created via one of the `watch_*` methods on {Queue}.
One {Queue} may have many {Watcher}s. The Queue actually takes care of the checking for events, via \{Queue#run run} or \{Queue#process process}.
Watcher objects themselves have several useful capabilities. Each subclass keeps track of its own specific information. In addition, all Watchers can be \{delete! deleted from the queue}, \{add! added back in}, \{disable! disabled}, and \{enable! enabled}.
@private @param queue [Queue] The queue for which this watcher will be used. @param ident [Fixnum] The underlying kqueue identifier for this watcher. @param filter [Symbol] The name of the underlying kqueue filter for this watcher. @param fflags [Array<Symbol>] Filter-specific flags. @param data [Fixnum] Filter-specific data. @param callback [Proc{Event -> void}] The callback that will be called
on any events fired by this watcher.
@raise [SystemCallError] If something goes wrong when registering this Watcher.