User activity by day and month

Early review of direction, here's the approach:

* Refactor user activity to build a common table that shows which users performed which categories of action on each day in each course
* Generate downstream aggregates from the common table
* Introduce a calendar table (which can later be extended to include complex things like fiscal year/quarter stuff)

If this approach looks good I'll write a bunch of unit tests for the calendar table, and increase the coverage of the user activity computation.

@brianhw @rocha
It was more that a relative delta of months can mean different things to different people and I would have had to go verify that the third party lib was doing what I expect it to... I was reading that in finance 1 month can mean 30 days regardless of the number of days in particular months. Furthermore, other people wandering through the code base may have the same question (what is the third party lib doing?), and I would just have to have a comment explaining it. I figured that in this case it might be simpler just to include the logic since it's only 2 lines of code.

Without some kind of ISO standard (like there is for weeks) I figured using a tool like relativedelta could actually be *less* clear to a future reader.

The fact that "months" is not included in timedelta is also indicative of this lack of clarity, see:
https://www.google.com/search?q=python+timedelta+months