Simplify get_decorator_or_context_object.

Remove one level of indirection (confusion) caused by making
get_decorator_or_context_object a decorator that's never actually used
as a decorator (applied with @get_decorator_or_context_object) but only
to modify functions, by just passing in the modified function as a
required argument.
Add an @insert decorator to add methods to classes.

Works similarly to @patch, but throws an exception if the method to be
inserted already exists (for example it was added in a newer version
of the target class) instead of silently replacing it with an
incompatible implementation.