Add content keyword:

The new 'content' keyword allows to set the content for the
current response. This is to accommodate asynchornous functionality
added in the future.

Until now, setting the content was basically done by returning
content from the route subroutine (using 'template' or data which
is then serialized by a serializer), or you could go to the request
directly - which is generally discouraged, because it goes into
the core without the DSL layer.
Ignore route response if content set using keyword:

Since the response from the route is the content in a response,
even if you set the content using the 'content' keyword, it still
overrides (and overwrites) the content attribute in the response.

Instead, we add a predicate and a clearer, and we remove the
default value of the response content.

We then check if there's a value provided using the 'content'
keyword. If yes, we will use that as the value. Otherwise, we
use the response from the route.

When a request has been passed, we actually clear the content,
because the next response has to set the content. This will not
allow setting the content and then passing. Tricky, but passing
is bad anyway.
Merge branch 'feature/content-keyword'