Changes to make automation easier.

I'll be looking to instantiate a Bagheera server within a JUnit test. That led me to refactor out the driver class, and along the way make some improvements: removal of static access to channels, encapsulation of state, etc. etc.

In theory you can now run two Bagheera servers within the same JVM, and you can start one from inside a Java method.

I will probably hit more things as I come to use this in anger; I haven't audited the rest of the code for static accesses.

Test suite passes locally, but given that I don't have Zookeeper running yet, I don't know how much that's worth.

Please do whatever smoketest you would do prior to a production push, as well as a code review!

If you let me know what your smoketest looks like, I'll try to set it up myself for the future.

Thanks!