Use local time instead of UTC in certain contexts

Despite using timezone-aware objects throughout the codebase, many dates
and datetimes were created assuming local times, not UTC times. This
creates a number of problems (for instance, the date on a UTC time can
differ from the local time's).

Where it is appropriate, use local time instead of UTC. In cases of time
diffs, there's no need to get times expressed in local time, so leave
them as-is.
Add MIT student affiliation, randomness, datetimes

Previously, in the case of a tie on scoring metrics, those who have
earlier order in the database would get preference. Use randomness in
sorting so that database order plays no role.

As Winter School is a program primarily for MIT students, they should
get preference in the lottery algorithm. Add this as a category.

Additionally, trips should close at midnight before the trip (not 24
hours after being made into FCFS).
Don't favor trip attendance over no trips

The existing system aims to put "flaky" participants lower in the
resolution order. However, by using the raw reliability score, we can
unintentionally give preference to those who've been on trips when
compared to those who haven't had the chance. This negates the influence
of the secondary sorting metric - number of trips.
Enable signup for users not on waitlist/trip

SignUp records are rarely deleted. The "All signups" section for a trip
shows everyone who has signed up for a trip and not manually deleted
their signup or had this done by a leader. If a participant has a signup
in the trip's signup set, they cannot sign up again.

However, this design presents a problem. When the lottery places a
participant on another trip, they are encouraged to sign up for the
newly-converted first-come, first-serve trips. But if they've signed up
for any of these trips, they're unable to express their interest in
re-joining.

This commit solves this issue, giving participants a single button to
express their interest in a trip and re-join.