Add test for whisper.info() with a bogus file returning None
Make whisper.info() return None for a non-existant file
Small refactor of a test
Add tests for a few edge cases in file_fetch
A few cleanups in file_fetch()
Add another invalid retention test for parseRetentionDef()
Test a few silly methods in CorruptWhisperFile
Removing a bare except: around a struct.unpack

This is for setAggregationMethod
Simulate a corrupt whisper file for setAggregationMethod tests
Add SimulatedCorruptWhisperFile() context manager for testing
Add AssertRaisesException to test_whisper

Unlike unittest.TestCase.assertRaises, this context manager will
also validate the contents of the raised exception and not just
the type.

There are places in the whisper codebase where an InvalidConfiguration
or CorruptWhisperFile exception is raised with different values. This
ensures we are getting the expected exceptions when we think we are.
Actually use the fancy new context managers in testing whisper.info()
Large test conversion: self.assertRaises --> AssertRaisesException

This ensures that when we are testing for an exception, it is in the
code path we think it is hitting.
Small stylistic updates