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.
I'd just go for the code below, as it feels a lot simpler to me:

    public static Predicate<CharSequence> containsAllLiterals(final String... fragments) {
        List<Predicate<CharSequence>> fragmentPredicates = Lists.newArrayList();
        for (String fragment : fragments) {
            fragmentPredicates.add(containsLiteral(fragment));
        }
        return Predicates.and(fragmentPredicates);
    }