Make extension and extension.{manifest,extension,resource} independent

That is, make it possible to import without an installed system.
Meaningless in itself, but convenient to have the possibility.
Redesign service manager start-up synchronization

When starting the service manager via the SysV init script (or possible
other future mechanism) we wish to wait until all services have actually
been started before "returning."  (This primarily to avoid races when
testing.)

This was previously done by waiting for each configured service's pid file
to be created.  That approach does not work if some configured service
decides to stop immediately after having determined that it need not run.
It also doesn't handle gracefully the case of some configured service
crashing immediately.  In both of these cases, the waiting mechanism would
simply wait until its timeout was reached, and not say anything or fail.

The new mechanism is that before starting some service, we create a
temporary file named "<pidfile_path>.starting", which the service deletes
after having performed its start-up work (for instance started listening
to its command socket) and before it goes into "normal operation" mode.

To implement this, add a new method BackgroundProcess.start() which should
be used to start a service rather than calling run() directly.  The start()
method calls the startup() method, then deletes the temporary file, then
calls run() and finally calls shutdown() just before exiting.
Add support for FilterHook extension roles

A FilterHook extension role allows an extension to implement additional
filter types (in addition to the native filter types "reviewer", "watcher"
and "ignored".)

When a user has installed the extension and has added such a filter, and
the filter matches changes in commits added to a review (including when
the review is first created) the extension role's function is called
(asynchronously) with the arguments "filter data", the Review object, a
CommitSet representing the added commits, and a list of File objects
representing the set of matched files that were touched by those commits.

The "filter data" is a string value that the user sets as part of the
filter (in the "Add filter" dialog) if the extension has requested it.
The extension requests it by defining the "DataDescription" setting in the
role's section in the MANIFEST file.  (If no such description is given,
the user is not presented with an input field for the "filter data" value,
and the value passed to the role's function is always null.)