Add 'attach' and 'examine' to add metadata.

Every route declared (i.e. added via 'addRoute') is now parameterised by
some arbitrary type. A value can be added to the previously added route
via 'attach' and all values can be retrieved via 'examine'. This will
hopefully enable documentation DSLs.

Additionally 'route' will no longer work directly on 'Routes' but on the
result of 'expand' (which is renamed to 'prepare'). The idea is to make
this a two-step setup so that client code has a means to fiddle with the
prepared routes if necessary (to add metrics for instance).
Swap order of type variables in 'Routes'.
Add 'pmap' 'pmapT' and 'pmapF'.

Also hide predicate implementations and provide constructor functions.
Update tutorial and example.
Release as version 0.2