Client design update

Make Client an interface and change the previous Client class to
ClientImpl.
Update the unit-tests accordingly.