script to generate more realistic data for coach reports

This script models four types of users with three sets of parameters each.  It generates exercise logs with attempts, streaks, and points and video logs with total_seconds_watched and points that follow our rules.  It starts learners at a particular time, and time-stamps their completion points for exercise and video logs.

The four user types are:
* common - an average, motivated user
* unchallenged - someone who learns quickly, but is not working hard compared to their ability
* struggling - someone who is trying hard, but is not getting much in the way of results
* inactive - users who are registered, but do nothing.

The three parameters are:
* speed_of_learning: given that they start an exercise, how quickly do they master?
* effort_level: affects both how frequently an exercise or video is begun, as well as how many attempts a student will do.
* time_in_program: from some standard "start date", where between that start date and now the student began learning.

For each user, for each parameter, a sample is taken from a Gaussian distribution.  Values for the users parameters are stored (and loaded) as json in the user's "notes" field, so that re-running the script will generate further data consistent with a user's parameters.

I've also included a set of topic_tools utility functions that were used in generating the data.  The data can be visualized using the IDOC_coach_reports branch (forthcoming).  I wanted to submit this code request separately, to spread out the amount of code in one pull request.

@rtibbles, could you take a look at this?