bugfix: allow scoped variables in matcher chains

Fix a bug where the 'should' DSL function causes any remaining messages
of an entire block (message chain) to be evaluated in the context of the
object ('actual') that 'should' is called on.

The message chain that must be evaluated in the context of 'actual' is
the matcher passed to 'should'. The message chain of the matcher (all
messages until EOL) is now extracted from normal execution flow, while
any remaining messages in the chain are evaluated in the original
context.