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.
Could you split this chaining into two calls? Already wondered why `NewClient()` is returning two values until I recognized then `EnsureAvailability()`.