Report total events of a given time period in a CSV, sorted by date.
Merge pull request #52 from edx/benp/total-event-report

Benp/total event report
Improve performance of event exports

Looking at the debug log statements, I noticed the following:

1. The reducer task JVM was being reused.
2. When the reducer task JVM is reused it also reuses the python process that is actually executing the reducer.
3. This results in the python process using the same memory for different reduce tasks.
4. The recipient list stored in self.recipients_for_org_id[org_id] was being appended to on each successive reduce task.
5. After the 5th reduce task this results in a recipient list that looks something like [real.recipient@foo.com, master@key.com, master@key.com, master@key.com, master@key.com, master@key.com]
6. We then would read each of those key files. In this case, re-reading the same key, many times.
7. A read is very expensive since it involves a subprocess call to the hadoop CLI which in turn spins up a new JVM and then does a bunch of S3 API calls and network I/O.
8. To mitigate the issue I have now converted the recipient list to set and ensured it is only appended to once, in init_local. Additionally I added in a key cache so that we can take advantage of the fact that several reduce tasks all execute in a single process.

Additionally, the log level of the python processes that are executed on the slave nodes has been changed to INFO by default now, and can be overridden with a configuratin parameter, allowing for even more detailed debug information to be logged.