Add `ifAbsent` and `optional` and add fields to `Error`.

`Error` contains much more information now, such as the source of an
error (usually the parameter name), the error reason (availability or
type conversion failure) and a set of labels ("query", "header", etc).
This information is used in the new predicate modifiers `ifAbsent` and
`optional` which correspond roughly to `def` and `opt` except being
specific to predicates which use `Error` as their `Fail` metadata and
which do not recover from type conversion failures.
Remove Data.Predicate.{def,opt}

Instead make `ifAbsent` the new `def` and `optional` the new `opt`. The
old definitions can easily be expressed using existing functionality
(e.g. `def a p = p .|. constant a`).
Update CHANGELOG.
Release as version 0.6