Add sessions to votes

Adds session objects, hooks them in to the database, and makes them
required when trying to "PUT /user/id/vote/"
Add dummy UserSessionVoteController

Adds the outline for a UserSessionVoteController, which rejects all calls
as MethodNotAllowed
Basic test data

Populates the UserSessionVoteController with some users, votes, options
and sessions, and plugs them in to the mock context
Implement "GET /user/id/session/id/vote"

Allows the vote(s) for a given user in a given session to be fetched.
Currently this does not extend to GET /user/id/session/id/vote/id".
GET /user/id/session/id/vote/id

Fetches the vote for a given user-session. Votes for a different user
or session are classed as "Not found".
Fix route name clash

Copy+Paste fail: we had two routes with the same name.
Fix Session-type typo

We were getting cascade warnings about deleting a User. Turns out this
was just because we had two user objects on a vote.
Fix up front-end

Currently hard-codes "Session 1" for all votes. This allows us to PUT to
cast a new vote, as well as fetching back a list of selected options for
the user within that session, without returning votes from other sessions
Introduce SessionVoteController

Introduces a controller for fetching all votes within a given voting
session.

Currently all calls return MethodNotAllowed
Implement "GET /session/id/vote/"

Fetches all votes within a given session
Hook in to Results page

Requests only the votes from Session 1 to display on the results page.
This also requires us to include User and Option data in the returned
vote, as the VoteController does.
Fix virtual/override warnings
Introduce basic SessionController

Implements an empty implementation of the SessionController, where all
methods return MethodNotAllowed.
Implement "POST /session"

Allows sessions to be POSTed to, to create new sessions.
Sessions must have a "Name"
Implement "GET /session/id"

Fetches a single session matching the ID, or 404s.
Implement "GET /session"

Fetches all sessions in the current context.
Front-end Session selection

If no sessionId is provided when arriving at the page, then the user is
prompted to pick a session. The sessionId is then stored in the URL,
allowing the URL to be shared around without having to specify the
session each time.
Results for session

After voting, the user is redirected to the corresponding Results page
for that session.
Only replace votes in the current session

Previously, the PUT /vote was overwriting the first vote for that user
without checking that the overwritten vote was in the same session.
Now, we only overwrite if the user and session match.
Keep in the same session when switching pages

Sets the links to "Voting" and "Results" to include the session ID,
so we don't lose it when changing pages.