Better error handling/reporting

This adds the possibility to raise exceptions instead of constantly looking at error states, making calling code much cleaner, by using a parameter at construction time:
```python
kt = KyotoTycoon(exceptions=True)
```

It now raises an exception if "atomic=True" parameters are used with the binary protocol, because it doesn't seem to support it (from looking at the KT server's code, bulk operations seem to **always** be non-atomic).

Some small fixes are included, as well as support for using KyotoTycoon objects in 'with' statements with automatic cleanup, like so:
```python
kt = KyotoTycoon(exceptions=True)
with kt.connect("ktserver.example.com") as db:
    ...
```