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.
Continuation from above -- this uses the same shortening of Table to mean TableTask.  But here it goes further, where it implies that the requirements will all be other Table(Task)s.  So far that assumption holds.  Are there likely cases where one would have a requirement that was a Task but not a Table(Task)?  If so, would they be included in required_tables(), or do they get defined as required() with a call to super()?