Rename Client->BaseClient and assign to module in a nicer way
Make a factory method for Clients
Create classes instead of instances

Before I was creating individual instance of the Clients as module level
instances.  This change converts these into actual classes which can
be instantiated with their own options.  This brings us closer to the JS
API