Add some extra automatically-derived instances

The Id type, for id (primary key) columns in the database, is now
an instance of Read and Eq, which are both required so that
ids can be used in URLs in the web GUI. Also, they are
automatically derived and (Eq in particular) useful in general.

Also added Ord instances to TrackCount and TrackNumber, with
obvious usefulness.
Tidy up recordings list

Added a new column type to the DBTableWidget which displays
both the track number and track count as "x of y". Added that
to the ListRecordings page and removed the track number and count
columns as well as the "album artist" column.
All database queries now return either a list or a Maybe

Previously, looking up a row by id was assumed to always be
successful and therefor returned an, e.g., Album. These functions
now return, e.g., Maybe Album and so can indicate failure with
Nothing. This required some significant refactoring of other
functions.
Allow conversion of Id to/from text

RecordingID, AlbumID and ArtistID can now be converted to/from
hexadecimal text strings. This is necessary to allow them to
be specified in routes by the Web GUI.

An alternative would have been to expose the constructor and
thereby allow conversion to and from Integers, but I think
supplying this converter to and from strings is better because
it mostly preserves the opaqueness of the types.

Of course, I could just use read and show but this approach has
the advantage of compactness and Haskell-independence.
Add a page for displaying information on a single album.

Includes links from the recordings list page.