Extract client interface

- Testing classes that have the client as a collaborator is tricky as
there is no interface to stub / mock leading to fat integration tests.

We'd like to be able to test without any external systems involved.  This makes it easier.