Add `Description` class.

Intended for generating AST information from predicates to use
with documentation tools.
Add :>, :< and documentation strings.

The predicate combinators :> and :< only evaluate their RHS or LHS and
are useful for their descriptions only. This can be exploited for
example with the `Doc` predicate:

    get "/foo" handler $
        doc "foo is like bar or baz and bla bla..." :>
        accept :&: hdr "xyz"

This declaration adds the documentation string the the predicate's
description, but does not add any `TVal` or `FVal`.
Add ability to tag many description nodes in AST.
Add Typeof.
Refine Typeof and replace the Typeable calls.
Support sum types and tweak type representation.
Mage `CSV` an instance of `Typeof`.