Refactored BaseClient. Added new tests for ClientDriver.

BaseClient has been refactored as Client and now uses a dependency
injection pattern. This makes this class easier to test. JSONClient is
now JSONClientDriver and SOAPClient is now SOAPClientDriver, they both
extend a new ClientDriver base class.