clean up cluster state change callbacks

There are 3 types of callbacks for state changes:

- participant state change (leading/following/recovering)
- cluster member change (node join / leave)
- active follower list change

The cluster member change should be something like:

```
void clusterChanged(List<String> servers);
```

For the participant state change and active follower list change, maybe we could do something like:

```
void leading(List<String> activeFollowers);
void following(String leader);
void recovering();
```