Refactor daily course enrollment

@brianhw as discussed.

Note the introduction of HiveQueryToMysqlTask.

Still needs a bunch of docs and testing. A quick validation run indicates I didn't actually change the output at all.
I initially found the lack of "Task" suffix on the classname to be jarring.  It really is a TableTask, as the base class suggests.  Maybe it's not ambiguous -- that a "Table" class implies that it's also a task and not just a class that deals with a table.  But this also carries over to the use of "required_tables()".