conn.py performance improvements, make examples work, add another example

The change consists of:
- Adding load_example.py, which shows large message behavior.
- Updating example.py to actually compile and run.
- Adding ErrorString handling so that human readable error messages are easier to get to.
- Refactoring conn.py to use a common init/reinit pattern.
- Refactoring conn.py to use ''.join() instead of str += str (~5-10% performance increase on my limited testing)