Here's a stub region observer coprocessor.
Demonstrate turning a coprocessor on.

See the comments for declaring and removing coprocessors from the hbase shell.
Here's a sample multi-multi pub-sub communication protocol in zeromq.

We'll use it to distribute events from RegionObservers to subscribing ChangeSpout tasks.

Notice the tasks are the subscribers in this model, not the coprocessors.  This has the advantage of requiring only one tcp port per region server.  This port number could be communicated as a coprocessor argument on the table definition, relieving the need for something like zookeeper to contain and distribute configuration.
Flush out base type, fixture for coprocessors.
Add ZMQContextFactory, inject it.
ZMQ.Context is a singleton.
Further qualify config key name.
ChangeForwarder bridges many inproc publishers into one TPC socket.

We'll use this to allow several coprocessor instances to publish events, while simultaneously allowing listening storm components to connect to just one port per region server.
Switch to explicit setter injection in coprocessors.

Going to see if I can eliminate usage of the injectors in test.
Add onStart and onStop to BaseCoprocessor.

This allows us to test side-effects from these events while avoiding injection.
doco
Inject and start/stop a change forwarder in change coprocessor.
Extract CoprocessorFixture#inject.
Add a Main class entry to the generated BigJar.
whitespace
Create an all-in-one jar in 'package'.
Add the means to set the main class on the basic jar.
Make sure jzmq gets included in big jar/
Close sockets before joining to avoid an annoying timeout.
override annotations