Set up classes for event/storage using the visitor pattern

In this implementation of the visitor pattern, Event is the visited
element and Storage is the visitor. The pattern allows the selection
of a storage method based on the dynamic types of both the Event and
the Storage object.
Update UML design diagram

Changes to UML diagram based on implementation of event/storage
classes in commit:e47c3a82daa9.
Add basic database handling methods to MySQLStorage
Store the time of an Event

Initialise an event with the current timestamp, storing to a timeval
struct so that we have access to sub-second timings. Store as two
columns, datetime and milliseconds, in the MySQL database.
Refactor Event::jobId to Event::dataId
Basic outline for Datastream and Filter classes
Add WmlSettings object to store Datastream settings

All I've done so far is to get it to pull in required libs and
initialise the settings object.
Initial work on processing data through datastream filters
Fix order of directives so that comments make sense
Further work on processing data through datastream filters

Previously we wrote filter output to a file and passed the path to
this file to the next filter. However, some filters will modify the
input data file in place, which means that we lose the output of
individual filters. To ensure that we can track back through the
output of individual filters if desired, pass the data via standard
input channel, so that modifications made by filter are applied to
a temporary file copy instead of our stored version.

Also, add some attributes to the Data class, add a method to
Datastream to log events, and add a new test program.
Send original print data to process stdin rather than as arg

As noted in commit:153c1008 some filters modify the data file, so send
data to the initial filter on the process's stdin pipe in order that
the stored copy of the original data is not modified.
Updates to design document
Import code from CUPS required to look up filter chain via mime types

Brings in CUPS code to provide methods for determining the filter
chain using mime.types and mime.convs.

The imported code is the minimum required to access the desired
methods, with heavy modification to avoid code that's not required (or
desired).

A test program allows us to look up the filter chain for specified
input and target destination.
Add a method to set up filters according to mime rules for input file

Add a method to set up filters according to mime rules for input file
and target destination type.

TODO make location of filter programs user configurable, and use the
destination type set for the datastream, however that is done.
Rearrange code imported from CUPS so that common headers are accessible

Rearrange code imported from CUPS so that common headers
(cups-private.h etc) are accessible when we bring in further code for
PPD wrangling.

Also got rid of a couple of http related bits in file.h/file.c.
Implement automatic filter chain selection based on PPD entries

For each cupsFilter entry in the PPD, calculate the total cost of
conversion to the output file type and select the filter chain with
the lowest cost.

Incorporates PPD handling code from CUPS.
Introduce FilterFeature and DatastreamOption classes to allow
grouping, storage and display of filter options for a Datastream.
Remove inlining of accessors from Datastream and Data classes
Remove inlining of accessors from Event class
Use in-class initialisation for database credentials

Use in-class initialisation to assign the static default values for
the database credentials in MySQLStorage.