'Decorate *alias* with the specified *decorators*, *alias*
has to be a registered function in the current toolbox.
:param alias: The name of the operator to decorate.
:param decorator: One or more function decorator. If multiple
decorators are provided they will be applied in
order, with the last decorator decorating all the
others.
.. note::
Decorate a function using the toolbox makes it unpicklable, and
will produce an error on pickling. Although this limitation is not
relevant in most cases, it may have an impact on distributed
environments like multiprocessing.
A function can still be decorated manually before it is added to
the toolbox (using the @ notation) in order to be picklable.'

def decorate(self, alias, *decorators):

    pfunc = getattr(self, alias)
    (function, args, kargs) = (pfunc.func, pfunc.args, pfunc.keywords)
    for decorator in decorators:
        function = decorator(function)
    self.register(alias, function, *args, **kargs)
