Change the handling of parameter sources

A Param's source is no longer defined with the creation of the Param.
Params can be created and reused for different sources, because the
source for a parameter is now defined by adding a Shapeless tag to the param.

This allows for better reuse of params. Also, a complete model (for a
JSON body param for example) can be defined and then reused for
different sources.

The transition from Scalaz tags to Shapeless tags was done because of
issues with implicit resolution of Scalaz tags.