Districts!

Discussion in #917

Implementation:
-----
District points are calculated for each event, and stored under the Event model as district_points_json. This stores the points breakdown (qual, elim, alliance, and award) scores for each team as well as any information required for tiebreakers (# qual wins, top 3 highest qual scores). This is data is displayed on event details pages (see second screenshot).

On the Rankings page, we fetch the Event model for all events for a district for a year and aggregate all of the point breakdowns for the first 2 events for each team + the district championship if they attend. Aggregation isn't to computationally intensive, but the only way to access rookie year is to fetch all teams, which is on the order of 250 teams per district. We might offload this to a cron job later, but for now, we'll just rely on caching to help us. This data is displayed on the new Rankings page (see third screenshot).

Screenshots:
-----
(Rookie bonus is incorrect because my local machine doesn't have a full copy of data.)
![first robotics events the blue alliance](https://cloud.githubusercontent.com/assets/1421884/3421537/48230fcc-fef2-11e3-8ddf-c406d89ad411.png)
![first robotics michigan district the blue alliance](https://cloud.githubusercontent.com/assets/1421884/3421538/482320de-fef2-11e3-9ca0-3b799cb8f8e5.png)
![center line first robotics district competition 2014 the blue alliance](https://cloud.githubusercontent.com/assets/1421884/3421542/6657d3a6-fef2-11e3-9d9d-8f4a1162ef56.png)

At some point we should figure out how to DRY on all this year checking.