Add new HighAvailabilityFacade for new ensure-availability command
go fmt
Tweak NewClient to improve testability
Merge branch 'master' into ensure-availability-to
Merge master, resolve conflicts
Code review tweak
Fix tests
Merge pull request #737 from wallyworld/ensure-availability-to

New HighAvailability facade

We need to add placement directives to the ensure-availability command. Hence we need to modify the API. As with most client APIs, there's one big facade. This doesn't lend itself to API versioning very well. So a new HighAvailability facade is introduced. This adds to our other existing client facades like KeyManager, UserManager etc.

Most of the changes are moving existing functionality from client -> highavailability packages. The client facade retains shims to redirect calls to the new facade.

The ensure-availability command detects whether the new facade is available and uses it if possible.

The next branch will actually do something with the placement directives.