Massive refactoring of the unit tests

Reduce code duplication by making decorating the test methods to wrap
common code. Possibly not the most unopaque way of doing this, but it's
attractive. Plus nose automatically returns the feature name when a test
fails.
Set test names to something meaningful