This adds a transport layer request spec class

The idea here is to be declarative i.e. specify *what* is desired.
It's up to the respective transport (e.g. http, zmq etc.) to turn a
request spec into an appropriate request.

The request spec class also performs some basic validation.  The
assumption is that the Marconi API is stable and known for a given
version. The API info for version 1 is thus captured in the code and
not read from the home document.

Nevertheless I have introduced a separate api_info() function that
allows us to source the API info from the home document at a later point.

Please note also that the `request.Spec` has a `headers` dict property
that can be used by the auth layer to inject auth tokens etc.

Change-Id: Ia72bfadcc84e7aba69aa5f32d76dfa0dc1083e0d