Add __init__ to base module
Add gitignore
Add .gitignore is subdir
Fb303
Service Framework initial commit
Initial commit of thrift server task
Add NBThriftServer.getProcessor

Either you shoudld subclass the task and implement TProcessor or make
your VService implement TProcessor
Allow tasks to throw SkipTask during creation

SkipTask allows a task to decide it shouldn't be registered
Make VService call initTask instead of happening in __init__

This allows tasks to introspect self.service.tasks or to call
self.service.requireTask() without worrying about task order
VService.requireTask
Support graceful shutdown, restart better with thrift services
Instead of subclassing TProcessor, set THRIFT=module
vfb303.FacebookBase

Defines a base class, vfb303.FacebookBase.  Mix this into your VService
subclass in order to get an FB303 implementation.
No vim swap files
Support LOOPLESS tasks

Loopless tasks are tasks that set LOOPLESS = True in their class
definition.  This causes initTask(), start(), and stop() to still be
called, but no worker thread is spun up targetting _runloop().

This allows you to implement Tasks that are dependant on other tasks,
can have inputs and methods, but do not occur based on any particular
periodic or queue-based event
improve loggin
Fix initTask() logic to actually work as intended

During initTask() task.service.tasks should be ALL the selected tasks.

Afterwards (in _runloop), task.service.tasks is only the tasks that did
not throw SkipTask
tasks.tornado tasks

This adds some new tasks:

* TornadoIOLoopTask - runs tornado's IOLoop (in a separate thread)
* TornadoHTTPTask - inits an HTTP Application
* TornadoTask - is a base class for other tasks that require the Tornado
IOLoop.  it provides self.ioloop as well as enforce IOLoopTask is
started

Since only one IOLoop is necessary, TornadoHTTPTask is LOOPLESS

Also, if TornadoIOLoopTask is in the selected services, but no services
actually require it, it will throw SkipTask (and not run).  If you need
the IOLOOP anyway, simply set REQUIRE_TORNADO = True on your VService
subclass
log.info on skipped tasks
Implement a ThriftHandler for tornado

This Handler requires a processor=... kwarg (e.g., self.service) for the
third value in the handler description (e.g.,:
  ('/thrift', TornadoThriftHandler, dict(processor=self.service))
).