Program capacity fixes

A preliminary attempt to implement a program max capacity feature that blocks all access to the program for all users that didn't register before the cap was reached, allows students who did register on time to continue registering, and respects the OverrideFull permission to, for example, the program capacity to not count against underserved students.

This code was written in a hurry late at night, and I think I might have made some changes that in theory would degrade performance by introducing multiple additional queries. Also, I had some trouble getting ``.exists()`` to work the way I wanted to. So I don't think this code should necessarily be merged right now, but I would like to get some eyes on it. This is currently running on Stanford's site.