Add stateful environment for predicates.

Predicates may cache results indexed by arbitrary ByteStrings.
Add support for caching.

Predicates may store arbitrary intermediate results in a stateful
environment consisting of bindings von ByteString to Dynamic values.
This may improve the evaluation of 'apply' when the predicate is invoked
multiple times per request.
Remove unnecessary instances of Boolean.
Simplify (:|:), (:&:), (:||:) implementations.
Introduce 'Error' type instead of using tuples.

Also make the meta-data of 'F' non-optional. As we removed Monad and
Alternative instances, there is no need to come up with an artificat
'zero' value for Booleans.
Represent MediaType quality as Double.
Add cabal-dev to .gitignore.
Simplify Routes imports.
Introduce optional delta value to Boolean.

Sometimes it is not enough to evaluate predicates per route and pick the
first one which evaluates to 'T'. For example content negotiation
requires picking the handler which is closest to the requested media
type. In order to support these scenarios, the 'T' branch of 'Boolean'
contains a list of (ByteString, Double) pairs. The string is a
classifier to denote some arbitrary category the delta applies to, the
Double represents the distance or delta from some optimum, e.g. 0.

During predicate evaluation the ones without any delta will be preferred
as they have no distance to the optimum. Otherwise the closest, i.e. the
one whose sum of delta values is lowest will be selected. Only the
intersection of all categories will be considered.

The previous paragraph explains this commit's implementation which is
not perfect. Whereas previously  predicates would be evaluated one by
one until one matches, the order is no longer guaranteed. Also a single
'Const ()' will always win, i.e. less specific predicates are favoured
which is not what we want.
Change calculation of closest match and add more media-types.

Predicate deltas are no longer classified, but a mere list of 'Double'
values. Predicate deltas are normalised before evaluation, i.e. shorter
ones are filled with 1.0s to the lenght of the longest one. This way we
favour most constraint predicated with the least delta and gradually
accept less constrained ones.

This commit also completes many more media-types using template haskell
to generate boilerplate code.