Add support for unversioned metadata change notifications
(i.e., for now, revprop changes) to SvnPubSub.

* tools/server-side/svnpubsub/svnpubsub/server.py:
   Add a second set of URLs that clients can subscribe to and hooks can post to.
   (Notification): New; base class for notification objects.
   (Commit): Change to subclass of Notification.
   (Metadata): New; another subclass of Notification.
   (Client.__init__): Accept another parameter 'kind' that define which
    notifications (commits or metadata) this client object is interested in.
   (Client.interested_in): Check notification types, too.
   (SvnPubSub.__notification_uri_map): Maps URL paths to notification types.
   (SvnPubSub.__init__): Remember the notification class for this instance.
   (SvnPubSub.render_GET): Check notification kind and pass it on to Clients.
   (SvnPubSub.notifyAll, SvnPubSub.renderPut):
    Parametrize implementation based on notification kind.
   (svnpubsub_server): Register two endpoints, for commits and notifications.

* tools/server-side/svnpubsub/revprop-change-hook.py: New hook script.
   Based on commit-hook.py but generates revprop change notifications.

* tools/server-side/svnpubsub/svnpubsub/client.py
  (Client.__init__): Accept optional metadata_callback.
  (Notification): New; base class for notification objects.
  (Commit): Make subclass of Notification.
  (Metadata): New; subclass of Notification.
  (JSONRecordHandler.__init__): Accept metadata_callback (can be None).
  (JSONRecordHandler.feed): Fix bug in unexpected version exception text.
   Emit metadata events if a handler is available.
  (MultiClient.__init__): Accept optional metadata_callback.
  (MultiCLient._add_channel): Optionally pass metadata_callback to Client.

* tools/server-side/svnpubsub/watcher.py (_metadata): New callback handler.
  (main): Pass _metadata handler to MultiClient constructor.


git-svn-id: https://svn.apache.org/repos/asf/subversion/trunk@1486463 13f79535-47bb-0310-9956-ffa450edef68