Reporting refactor

This refactoring formalizes certain concepts such as a `ReportCreator` and `ReportCourier`.  The motivation for the changes is that the current code is temporarily coupled—in that report creation, preparation, and sending are artificially tied together—which makes it difficult to change one aspect without affecting the others. This is the another step to make it easier to implement different "REDCap upload strategies" each with (potentially) their own report handlers.

The benefits of these changes are:
 - the code is easier to read because much of the implementation details are in `report.py`;
 - report creation, preparation, and sending are now decoupled and can vary more independently than before;
 - we can produce a zipped EGG file now that the last bit of code that depends on `get_proj_root()` has been removed.

One caveat. I ported over a bug in which, if emailing the report fails, the report is written to a hard-coded `report.html` instead of what's configured in `settings.ini`.