Switch to class-based views.

Remove function `index` and add class `Index`. The new class fills the same role
as the old function.

Function `reverse` can resolve paths to functions, but it cannot resolve paths
to classes. As a result, module `urls` and several calls to `reverse` must be
updated to compensate for this change.
Implement URL `campaign/create-form/`.

This URL only supports the HTTP GET operation.
Add class CampaignTable.

Table can be used to generate an HTML table displaying information about
Campaign objects. The table is not fully fleshed out. It should contain a
"virtual" column containing links to several pages.

Also add module `tables` to test suite.
Flesh out class Campaign (a view)

Make the Campaign view capable of responding to HTTP GET and POST requests. Also
create template `campaign.html`.
Write tests for all three view classes. Fix a bug.

Tests only check whether views correctly respond to HTTP POST and GET requests.
They do not ensure the views correctly respond to fake PUT and DELETE requests
(POST requests with _method="PUT").
Partially implement path /campaign/<id>/

Make URL respond to GET requests, but not PUT or DELETE. Make URL return a 404
exception if the requested object does not exist.
Write tests to GET path campaign/<id>/

Also fix another broken unit tests.
Refactor class CampaignId

Remove class method `CampaignId.get_campaign_or_404` and create function
`_get_model_object_or_404`. Add module `views` to test suite (the function has a
doctest).
Add campaign-related views.

Add the following view classes:
* CampaignIdUpdateForm (for path campaign/<id>/update-form/)
* CampaignIdDeleteForm (for path campaign/<id>/delete-form/)

Also add HTML templates which those classes use.
Add campaign-related paths to module `urls`

Add the following paths:
* gurps_manager/<id>/update-form/
* gurps_manager/<id>/delete-form/
Write tests for campaign-related paths.

Write tests for the following paths:
* campaign/<id>/update-form/
* campaign/<id>/delete-form/
Significantly flesh out tests for module `views`
Implement UI for two campaign-related paths.

Implement UI for the following paths:
* campaign/<id>/update-form/
* campaign/<id>/delete-form/