HA uses shared timestamp (last modified time), and negotiates concurrent starts, and handles former master recovery

resubmit of https://github.com/brooklyncentral/brooklyn/pull/1487, adding related code review comments from https://github.com/brooklyncentral/brooklyn/pull/1464, and solving multi-master situations
I'm fine with this, but note for other places...
The more complicated `waitForWritesComplete` call ensures that tests don't only pass because we're explicitly calling `persistNow`. Instead other tests are more passively observing what the production persistence code is doing. So let's not change the other uses of `waitForWritesComplete`.