Bug 1078520 - python client

Implement a python client.  Note to reviewers, there were a couple fairly substantial changes to the way the module in the latest commits.  It's probably best to only really look at the most recent code.
Options should not be dynamic.. Ideally people shouldn't be able to modify the options of an object after it has been constructed... But changing global config shouldn't modify objects constructed before the global config.

Recommend that we just construct the `self.options` property in the constructor, as:
```python
def __init__(self, options={}):
  self.options = {}
  self.options.update(_defaultConfig)
  self.options.update(options)
```
Then you can drop `def setOption` and `@property def options(self)`. If people absolutely want to modify the config after construction of a client they can do so at their own risk, but modifying the `self.options` object.