Brooklyn node and cluster upgrade

Merges #266 (cluster upgrade) with work I've been doing on node upgrade.

Builds on #260 so please ensure that is merged first.

Needs further testing (by me at this point) but wanted to push it in case @neykov you have comments, especially on the last commit.
my logic was that asking whether a quorum of item passes a given check is a natural predicate to apply to a collection, so `CollectionFunctionals.quorum` is natural and that requires something like `QuorumCheck`.  there is nothing brooklyn-specific about `QuorumCheck`.  do you not think so?