Add a more robust notification mechanism

- Now the notification mechanism works for all backends (local, in-memory, remote)
  and works cross backends as well (ie. if a client watches a remote irminsule server
  which stores its state as a local Git store, then the client is notified everytime
  someone modifies the HEAD of the repo using Git command directly on the filesystem)

- For now on, using active polling on unix -- later we could use inotify and fsevents:
  the hook as an interface very similar to what ocaml-inotify-lwt would give us.

- the watch API takes a path as argument: notifications are sent every time someone
   creates, removes or modifies a file in that directory