Add last_return and return_values to begin.context

Deprecate context.return_value in favour of last_return and the iterable
return_values. These properties will now always be set, regardless of
whether the previous function returned None or not.

Additionaly, the context object uses type swizzling to protect the
special properties so user code does not inadvertently replace the them.