Add OptionSet to Session

Creates an OptionSet object, and attaches it to the Session as a required
field.
Introduce empty OptionSetController

Adds a controller which marks all requests as MethodNotAllowed
Fetch existing OptionSets

Implements Get and Get-by-Id on OptionSets.
Also updates the SQL script to set up an initial option set, with no
options.
Set up front-end

Sets the home page up to register with OptionSet 1 for any new sessions,
and to request the options for a given session when voting.

Currently, the OptionSet #1 only exists if the SQL script is run, and
the /session/{id}/option gives a 404 as we haven't made the controller
yet.
Sets up empty SessionOptionSetController

Creates the SessionOptionSetController, configures the routing, and fills
it with MethodNotAllowed methods + tests.
Tweak front-end path

Supposed to be using "GET /session/{id}/optionset", not ".../option".
Front end now returns "405 Method Not Allowed"
Change direction!

We only ever want to have one OptionSet per session, so it doesn't make
sense to "GET /session/id/optionset/1", as this implies an optionset 2
or 3.

Instead, we just request the OptionSet of a session by requesting
"GET /session/id" and extracting the OptionSet from the response object
Create many-to-many table

Adds a List of OptionSets to Options. OptionSets already have a List of
Options, which forces EntityFramework to insert a Many-to-Many table
called OptionSetOptions.

Updates the Populate script to add all the restaurant options to the
OptionSet 1.
Session.Id => Session.UUID

Back and forth again. Entity Framework has issues with searching by Guid,
as it treats it as a string.

See http://www.danderson.me/posts/limitations-of-entity-framework-support-with-mysql-6-4-3-connectornet/
(search "no matching elements are found").
Fix infinite object recursion

Stops us recursing through the "OptionSet <-> Option" loop by stopping
after we encounter an object we've already serialized.
Allow selection of optionset on creating a new session

Adds a dropdown to the create-session form, with all the different
available option sets
Enable automatic database migrations

Allows the database to automatically update when the data models change,
without us having to drop the database.

See http://geekswithblogs.net/michelotti/archive/2012/11/13/enable-automatic-code-first-migrations-on-sql-database-in-azure.aspx
Include Options in "GET /optionset"
Style front-end for saving sessions

Adds an Update and Create button to the admin page, to save an OptionSet
Prepare front-end

Populates the front-end with Ajax calls to the expected API paths, with
the expected data. Intended to act as a sort of end-to-end test for
creating and modifying an OptionSet.
Implement OptionSet creation

Adds the "POST /optionset" path
Move "POST /controller/id" down to subclasses

The controller routing can't have a route with an long and Guid ID, so we
need the subclasses to say which they support.

Also updates the front-end to use "POST /session/id" for updating a session,
and any instances of sessionId to use a Guid instead of a long.
Implement "POST /session/id"

Replaces session with a new one (if a session exists), or adds the new
session to the list if not.
Allow options to be removed from a session

Hooks up the front and back ends to allows the option list of a session
to be modified independent of other sessions.
Use mutable Options for Sessions

Rather than using an optionset for Sessions, we take a copy of the
OptionSet's Options for the Session on creation.

The Session maintains its own mutable list of options, separate from the
immutable list of options on the OptionSet it was initialised from.