Add lottery frontend program module.

As the name implies, this serves as a frontend to the lottery registration assignment class. Currently it only allows configuration of parameters, running the lottery, and saving the results (or clearing previously saved results).

See Issue #803.
If LotteryAssignmentController.compute_assignments() fails probabilistically, I think it's much better for us to know than to just blindly retry -- what's the reasoning behind retrying like this?