Provide generic 'Opt' and 'Def' predicates.

These replace the various 'HdrOpt', 'QueryOpt' and so forth. The general
pattern for 'Opt' is to turn the 'TVal' of a given predicate into a
'Maybe' and return 'Nothing' if the underlying predicate fails. 'Def'
uses the given default value in this case.

Additionally :*: is renamed to ::: which looks less noisy.

Finally the predicate 'GetRequest' is added which enables client code to
get the original WAI Request if desired.