Use functools to imitate wrapped function

This is more thorough than updating only docstring by hand. This takes
care of:

- copies __name__, __module__, __annotations__, __doc__
- updates __dict__