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.
The `maximum(maxPeriod)` threw me there! It has the opposite behaviour to `Math,max(nextPeriod, maxPeriod)`.
I'd prefer us to rename the `maximum` to something less ambiguous, but not in this PR.