Change exception tests

`BaseException.message` was deprecated in Python 2.6. Rather than relying on it for tests, the tests now use `str(BaseException)`.
PEP8
Add ModelFactory() for testing

The test suite is full of models. Way too many. I end up adding new ones to accommodate slightly different permutations of the options without fear of screwing up an existing unit test.

The `ModelFactory()` method is being added to address this issue. Rather than declaring as many model classes as needed to satisfy all tests, a few simple ones can be created, with test-specific ones being created in the test when a small override is needed.

I probably don't need to add unit tests for a testing utility, but considering how many tests will rely on `ModelFactory()`, I'd like to make sure that it's actually creating model classes.

Closes #16
Update tests to use ModelFactory()

`ModelFactory()` is being introduced to the test suite to make model definitions easier and clearer. This should greatly improve future tests.

References #16