'Some parameters appear in all requests so simplify by doing
it in one place
:param request_cls: The specific request type
:param destination: The recipient
:param message_id: A message identifier
:param consent: Whether the principal have given her consent
:param extensions: Possible extensions
:param sign: Whether the request should be signed or not.
:param sign_prepare: Whether the signature should be prepared or not.
:param kwargs: Key word arguments specific to one request type
:return: A tuple containing the request ID and an instance of the
request_cls'

def _message(self, request_cls, destination=None, message_id=0, consent=None, extensions=None, sign=False, sign_prepare=False, nsprefix=None, **kwargs):

    if (not message_id):
        message_id = sid()
    for (key, val) in self.message_args(message_id).items():
        if (key not in kwargs):
            kwargs[key] = val
    req = request_cls(**kwargs)
    reqid = req.id
    if destination:
        req.destination = destination
    if consent:
        req.consent = 'true'
    if extensions:
        req.extensions = extensions
    if nsprefix:
        req.register_prefix(nsprefix)
    if sign:
        return (reqid, self.sign(req, sign_prepare=sign_prepare))
    else:
        logger.info(('REQUEST:    %s' % req))
        return (reqid, req)
