Unicode support

- All logging now spits out a unicode string
- Error messages must be str objects in order for the message to be raised, so unicode characters are escaped
```
>>> raise Exception(u'test {}'.format(u'\u2122'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception
>>> raise Exception('test {}'.format(u'\u2122'.encode('unicode_escape')))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: test \u2122

```
- isString(obj) returns True if obj is a basestring rather than strictly a str

@matthewbalvanz-wf