Allow more flexible adding of stored responses

This updates stored responses to allow adding complex responses
in a simpler manner. If the block that is used with `add` expects
an argument, a response will be yielded to it. This response can
have its code, message or data changed in the block and will be
used as the response. This will allow users to not have to manually
build a protocol response. If an argument is not expected, then the
block will work as it previously did.