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
Thanks! I was not really pushing hard for it, just giving you my arguments. It would have been fine with me if you didn't include it.

`dateutil` should deal with leap years and all those other exceptions. That is basically why I preferred to use some library for date manipulation, those things are very easy to get wrong.

I think you can also replace `isoweek` and use something in `dateutil` but that is not really required for this PR.