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.
This would be more testable if you passed in base.APICallCloser and the environment tag. Then you'd have no need for the `environTag` override, and you can mock the responses without resorting to patching contortions.