Add a listener to LeaderLatch so that you can be notified of state changes

This is an implementation of a listener on LeaderLatch that will be told when state changes.  

I'm certain that my code style settings are incorrect, but am not sure how to format properly (do you have an IntelliJ format file?) so I am submitting like this.

Also, I created a test that just verifies the happy path.  Not sure if more should be added to cover the non-happy path, or if you are comfortable believing that the other tests already cover that.  Let me know if there's something else I should add.

And, just for posterity, this is the email thread that sparked this:

Hi guys,

I'm looking at using Leader Latch and I noticed it only has polling mechanisms for figuring out if you are the leader.  I was wondering if there is a reason to not have a callback mechanism that you can register with two methods:

startBeingMaster();
stopBeingMaster();

Basically, any time setLeadership() is called with a value other than what it was, it would cause either startBeingMaster() to be called or stopBeingMaster() to be called.

I can effect this using an extra thread and the polling mechanisms that are there, but am wondering if I'm the only one that would prefer to interact with it in this way or if others would also prefer to have access to this type of API?

(Btw, for anyone wondering, I'm currently swapping out an old zookeeper client library for Curator and that's why I have all of these random questions about APIs and stuff)

-------------------------

Jordan Zimmerman jordan@jordanzimmerman.com via googlegroups.com 
1:48 PM (2 hours ago)

to curator-users 
Look at LeaderSelector. It is a leader recipe that has a callback mechanism. 

====================
Jordan Zimmerman

-------------------------

Eric Tschetter <cheddar@metamarkets.com>
2:27 PM (2 hours ago)

to curator-users 
Oh, that's the Leader Election recipe.

I don't really like that abstraction either because it makes me worry about too much:

1) Losing connection, etc.
2) "Relinquishing" leadership

I just want to either be the leader or not be the leader and have that choice be completely external.  That is, I want something to tell me that I became the leader or that I lost leadership.  I assume that I can always give up my leadership by just closing the thing down.