Handle ENOENT on stat() calls in DirectoryWatcherTask

Fixes #57
Add an initService() on VService

This makes it easier to do VService-subclass-specific initialization.
Move initService() call to just before Task Creation

This makes a little bit more sense than in the constructor.

If we put this in the constructor, then initService() is called even
before action-oriented command line options  have been called
(E.g., --tasks (list) or --install)
Some initialization refactoring

- Refactor local task resolution into a separate classmethod,
`resolveDependencies`
- Move runit-install and task list option handlers into a separate
method, `preprocessOptions`.  This is now before `createTasks()`
in the initialization flow.
- Simplify `createTasks()` to only handle task creation logic
Documentation and API consistency

Add docstrings to tons of things.  Also, prepend "_" to many methods
that are meant to be internal/private only.
Reorder some imports
VTask::initTaskThread() to do per-thread Task-specific init
Actually call preprocessOptions...

When committing the initial refactor, I forgot to include this.  Oops.
DirectoryWatcher (/dev/) example.
Add register / clear warnings API

Also add a unit test.

Fixes #51
Implement an easy-to-use thrift client wrapper.

Like writing thrift server code, writing thrift client code requires a
lot of boilerplate, and the core thrift libraries omit a lot of
basic functionality.

This diff adds a new module, sparts.thrift, defining `ThriftClient`

The preferred way to use ThriftClient is to use its class methods, such
as `for_hostport(host, port, **kwargs)` or `for_localhost(port, **kwargs)`.

While ThriftClient is flexible enough to be used directly, it is
encouraged to subclass it in order to reduce the number of required
creation arguments.
Add an fb303 client/server test.

This test case verifies a lot of functionality that was previously
untested, including:

- Basic ThriftProcessorTask functionality
- Fb303::getStatus()
- Basic NBServerTask functionality
- Basic ThriftClient functionality

Fixes #59
Document new thrift client more thoroughly
Fix accidental un-propertization of mock module on tests